執行緒等待喚醒機制

2021-10-08 14:29:52 字數 1797 閱讀 2548

等待喚醒機制

乙個執行緒在工作時發現某些條件不滿足了,這時可以釋放掉鎖,並暫停工作。目的是讓另乙個執行緒插入進來,進行條件的補給;

後進入的執行緒在補足條件後,可以進行「喚醒」,將之前所有等待的執行緒喚醒,讓他們繼續工作,然後自己退出。

//喚醒之後執行的**

system.out.

println

("包子已經做好了,開吃!");

system.out.

println

("---------------------------------------");

}}}}

.start()

;//建立乙個老闆執行緒(生產者)

newthread()

catch

(interruptedexception e)

//保證等待和喚醒的執行緒只能有乙個執行,需要使用同步技術

synchronized

(obj)}}

}.start();}}

/*

進入到timewaiting(計時等待)有兩種方式

1.使用sleep(long m)方法,在毫秒值結束之後,執行緒睡醒進入到runnable/blocked狀態

2.使用wait(long m)方法,wait方法如果在毫秒值結束之後,還沒有被notify喚醒,就會自動醒來,執行緒睡醒進入到runnable/blocked狀態

喚醒的方法:

void notify() 喚醒在此物件監視器上等待的單個執行緒。

void notifyall() 喚醒在此物件監視器上等待的所有執行緒。

*/public

class

demo02waitandnotify

catch

(interruptedexception e)

//喚醒之後執行的**

system.out.

println

("包子已經做好了,顧客1開吃!");

system.out.

println

("---------------------------------------");

}}}}

.start()

;// 建立乙個顧客執行緒(消費者)

newthread()

catch

(interruptedexception e)

//喚醒之後執行的**

system.out.

println

("包子已經做好了,顧客2開吃!");

system.out.

println

("---------------------------------------");

}}}}

.start()

;//建立乙個老闆執行緒(生產者)

newthread()

catch

(interruptedexception e)

//保證等待和喚醒的執行緒只能有乙個執行,需要使用同步技術

synchronized

(obj)}}

}.start();}}

執行緒的等待喚醒機制

執行緒間通訊 多個執行緒併發執行時,在預設情況下cpu是隨機切換執行緒的,當我們需要多個執行緒來共同完成一件任務,並且我們希望他們有規律的執行,那麼多執行緒之間需要一些協調通訊,以此來幫我們達到多執行緒共同操作乙份資料。如何保證執行緒間通訊有效利用資源 多個執行緒在處理同乙個資源,並且任務不同時,需...

等待喚醒機制

等待喚醒機制是多執行緒通訊中的概念,首先我們要先了解什麼是執行緒間的通訊 概念 多個執行緒都在處理同乙個資源,但是處理的任務不一樣。此時就需要多執行緒之間進行通訊,保證同一資源的正確性。剖析 通過多執行緒間的通訊的經典例項來進一步了解多執行緒間通訊的概念 經典例項 生產者,消費者 1 首先通過乙個簡...

等待喚醒機制

等待喚醒機制 涉及的方法 wait 將同步中的執行緒處於凍結狀態。釋放了執行權,釋放了資格。同時將執行緒物件儲存到執行緒池中。notify 喚醒執行緒池中某乙個等待執行緒。notifyall 喚醒的是執行緒池中的所有執行緒。注意 1 這些方法都需要定義在同步中。2 因為這些方法必須要標示所屬的鎖。你...