執行緒的等待與喚醒

2021-08-21 12:08:37 字數 1131 閱讀 5550

等待喚醒機制 

需要用到的方法 

wait():執行緒不在活動,不在參與排程,進入wait set中,因此不會去浪費cpu資源,也不會競爭鎖,這是的執行緒狀態為waiting,

它需要別的執行緒執行notify操作,這個執行緒才從wait set 中釋放出來,重新回到排程佇列中。

notify:選中所通知物件的wait set中的乙個執行緒釋放。

注意:被通知執行緒並不能立即執行,因為它已經沒有鎖了,它只能成功獲得鎖後才能在當初呼叫wait方法之後的地方恢復執行。

需要注意的細節:

wait和notify方法必須要被同乙個鎖物件呼叫。

wait和notify方法都是object的方法。

wait和notify方法必須在同步**塊或同步函式中使用。

吃包子案例說明下 

// 共同資源類:

public class baozi

@override

public void run() catch (interruptedexception e)

}system.out.println("吃貨在吃包子" + bz.getpier() + " " + bz.getxianer());

bz.setfalg(false);

bz.notify();}}

}}

生產包子執行緒:

public class baozipu extends thread 

private int count = 0;

@override

public void run() catch (interruptedexception e)

}if (count % 2 == 0) else

count++;

bz.setfalg(true);

system.out.println("生產好" + bz.getpier() + " " + bz.getxianer() + "包子");

bz.notify();}}

}}

測試類:

public class test 

}

執行緒等待與喚醒

標籤 多執行緒 所有的等待和喚醒執行緒,都是針對某個具體物件例項的.api介面 說明wait 讓當前執行緒進入等待 阻塞 狀態,直到其他執行緒呼叫此物件的notify 或notifyall 來喚醒,之後該執行緒進入就緒狀態.wait long timeout 讓當前執行緒進入阻塞狀態,直到其他執行緒...

執行緒等待與喚醒的例子

package cn.dali3.code06 模擬乙個小a買冰淇淋的例子。首先,小a告訴店員要吃什麼味道的冰淇淋。之後,小a開始等待,店員開始做 店員做好了交給小a,開始吃。這個例子就是2個執行緒之間的通訊模擬,小a是乙個執行緒,店員是另外乙個執行緒 很顯然這兩個執行緒是不可以同時進行的,所以在設...

執行緒等待喚醒機制

等待喚醒機制 乙個執行緒在工作時發現某些條件不滿足了,這時可以釋放掉鎖,並暫停工作。目的是讓另乙個執行緒插入進來,進行條件的補給 後進入的執行緒在補足條件後,可以進行 喚醒 將之前所有等待的執行緒喚醒,讓他們繼續工作,然後自己退出。喚醒之後執行的 system.out.println 包子已經做好了...