等待喚醒機制
需要用到的方法
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 包子已經做好了...