亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

多線程wait()釋放鎖嗎?那么這個問題怎么解決。

多線程wait()釋放鎖嗎?那么這個問題怎么解決。

慕工程2701759 2017-08-02 21:11:01
package?thread; public?class?TestSleep?implements?Runnable?{ private?int?time?=?10; private?Object?lock?=?new?Object(); public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub TestSleep?a?=?new?TestSleep(); Thread?t1?=?new?Thread(a); Thread?t2?=?new?Thread(a); t1.start(); t2.start(); } @Override public?void?run()?{ //?TODO?Auto-generated?method?stub synchronized?(lock)?{ for?(int?i?=?0;?i?<?10;?i++)?{ try?{ if?(time?==?5) lock.wait();//Thread.sleep(3000); //lock.notify(); time--; System.out.println(Thread.currentThread().getName()?+?"****"?+?time); }?catch?(Exception?e)?{ //?TODO?Auto-generated?catch?block e.printStackTrace(); } } } } }運行結果Thread-0****9Thread-0****8Thread-0****7Thread-0****6Thread-0****5按理來說,線程1搶到鎖,然后執行,到wait(),釋放鎖,應該CPU會運行其他線程,為什么運行到這里就停了(沒有完全運行完,沒有真正停止)
查看完整描述

2 回答

?
慕工程2701759

TA貢獻16條經驗 獲得超17個贊

這個問題我自己知道了,我應該把time--往上面移動到23行,不然time一直等于5導致兩個線程一直掛起,那么新的問題來了,線程一被我掛起,線程二應該完全輸出,都是線程一還能繼續輸出。為什么?

查看完整回答
反對 回復 2017-08-02
  • 禿頭披風俠0
    禿頭披風俠0
    lock是你的鎖不是你的子線程 它wait有什么用
  • 慕工程2701759
    慕工程2701759
    那怎么讓我的子線程wait?
  • 慕工程2701759
    慕工程2701759
    老哥,問題已經解決。我那樣寫沒錯,lock.wait()意思不是lock等待,是當前線程進入等待lock信號的狀態,讓出鎖。
  • 2 回答
  • 0 關注
  • 2530 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號