java归还线程_再谈java线程
什么是等待喚醒機制?
這是多個線程間的一種協作機制。
就是一個線程進行規定協作后,就進入到了等待狀態'wait()',等待其他線程執行完他們的指定代碼后,再將其喚醒'notify()';
在有多個線程進行等待時,如果需要,可以使用'notifyAll()'來喚醒所有的等待線程。
wait/notify就是線程間的一種協作機制。
等待喚醒中的方法;
等待喚醒機制就是用來解決線程間通信問題的。可以使用到的方法有三個如下
1.wait();線程不在活動,不在參與調度,進入到waiting設置中,因此不會浪費cpu資源,也不會去競爭鎖了,這時的線程狀態就是waiting,他還要等著別的線程執行一個特別的動作,就是喚醒通知'notify()',在這個對象上等待的線程從wait set中釋放出來,重新進入到調度隊列(ready queue)中。
2.notify();選取通知對象的wait set中的一個線程釋放。
3.notifyAll();釋放所通知對象的wait set中的全部線程。
//備注;哪怕只同時了一個等待線程,被通知的線程也不能立即回復執行,因為它當初中斷的地方是在同步塊內,而此刻它已經不持有鎖了,所以它需要再次嘗試著去獲取鎖(很可能面臨其他線程的競爭),成功后才能當初調用wait方法之后的地方恢復執行。
//總結;如果能獲取到鎖,線程就從waiting狀態轉變成runnable狀態,否則,從wait set中,又進入set中,線程就從waiting狀態轉變成blocked狀態。
'調用wait和notify方法的注意細節:'
1.wait方法和notify方法必須有同一個鎖對象調用。因為,對應的鎖對象可以通過notify喚醒使用同一個鎖對象的wait方法后的線程。
2.wait與notify方法是屬于Object類中的方法。因為鎖對象可以是任意對象,而任意對象的所屬類都是繼承了Object類的。
3.wait與notify方法必須在同步代碼塊中或者同步方法中使用。因為必須通過鎖對象調用這兩個方法來實現等待與喚醒。
包子鋪線程生產包子,吃貨線程消費包子,當包子沒的時候狀態為false,吃貨線程需要等待,包子鋪線程生產包子包子狀態為true,通知吃貨線程并解除吃貨狀態,因為已經有包子,,包子鋪線程進入等待狀態,接下來,吃貨線程能夠進一步取決于鎖的獲取狀態情況,如果吃貨線程取得到了鎖,就執行吃包子動作,包子吃完了包子狀態為false,通知包子鋪線程解除包子鋪線程等待狀態,此時吃貨線程就進入到等待狀態,包子鋪線程能否進一步執行則取決于鎖的獲取情況。
總結
以上是生活随笔為你收集整理的java归还线程_再谈java线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优学院java架构52破解_[单选] 肢
- 下一篇: python qt designer 重