第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

多線程基礎(chǔ)問(wèn)題 謝謝!!!

多線程基礎(chǔ)問(wèn)題 謝謝!!!

慕姐8946757 2017-08-10 05:47:18
public class TicketThread implements Runnable { static int tickets = 100;// 火車票數(shù)量 Object obj = new Object(); @Override public void run() { // 出售火車票 while (true) { /* * synchronized (obj) { method(); } */ method(); // method2(); } } private synchronized void method() { if (tickets > 0) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ":" + tickets--); } }請(qǐng)問(wèn)這段代碼中的if (tickets > 0) 能否改成if (tickets<= 0){break;} 改完后打印的有負(fù)數(shù) ,是什么問(wèn)題呢?
查看完整描述

2 回答

已采納
?
言曌博客liuyanzhao_com

TA貢獻(xiàn)164條經(jīng)驗(yàn) 獲得超117個(gè)贊

public?class?TicketThread?implements?Runnable?{
???static?int?tickets?=?100;//?火車票數(shù)量
???Object?obj?=?new?Object();
???
???@Override
???public?void?run()?{
??????//?出售火車票
??????while?(tickets>0)?{
?????????method();
??????}
??????
???}
???
????private??void?method()?{
??????if?(tickets?>?0)?{
?????????System.out.println(Thread.currentThread().getName()?+?":"?+?tickets--);
?????????try?{
????????????Thread.sleep(100);
?????????}?catch?(InterruptedException?e)?{
????????????e.printStackTrace();
?????????}
??????}
???}
???
???
???public?static?void?main(String[]?args)?{
??????TicketThread?ticketThread?=?new?TicketThread();
??????
??????Thread?t1?=?new?Thread(ticketThread,"甲站臺(tái)");
??????Thread?t2?=?new?Thread(ticketThread,"乙站臺(tái)");
??????Thread?t3?=?new?Thread(ticketThread,"丙站臺(tái)");
??????Thread?t4?=?new?Thread(ticketThread,"丁站臺(tái)");
??????
??????t1.start();
??????t2.start();
??????t3.start();
??????t4.start();
??????
???}
}

之所以出現(xiàn)負(fù)數(shù)票,我的解釋如下。

當(dāng)票數(shù)為1的時(shí)候,有 多個(gè)線程通過(guò)了 if 判斷語(yǔ)句,然后在休眠,沒有繼續(xù)往下執(zhí)行,以至于 tickets 的數(shù)量在段時(shí)間還是 1,線程喚醒后,繼續(xù)往下執(zhí)行,接著打印票的信息。就會(huì)出現(xiàn) -1,-2 之類的票了。

解決方案:我們把 打印票的語(yǔ)句和tickets-- 的放到 sleep 前面去即可

查看完整回答
反對(duì) 回復(fù) 2017-08-10
  • 慕姐8946757
    慕姐8946757
    請(qǐng)問(wèn)這段代碼中的if (tickets > 0) 能否改成if (tickets<= 0){break;} 為什么????
  • 慕姐8946757
    慕姐8946757
    我就想問(wèn)這段代碼中的判斷語(yǔ)句能不能改成if (tickets<= 0){break;} 為什么不可以?
  • 言曌博客liuyanzhao_com
    言曌博客liuyanzhao_com
    肯定不行啊,會(huì)出現(xiàn) ERROR 的。break 一般是用來(lái)結(jié)束循環(huán) 的,method 方法里又沒有 while 語(yǔ)句,怎么結(jié)束了。你用編輯器的時(shí)候,可以看到 break; 旁邊有個(gè)小紅叉的,表示 無(wú)法通過(guò)編譯
點(diǎn)擊展開后面2
  • 2 回答
  • 0 關(guān)注
  • 1167 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)