執行緒等待與喚醒的例子

2021-09-25 03:30:24 字數 1066 閱讀 7835

package cn.dali3.code06;

/*模擬乙個小a買冰淇淋的例子。

* 首先,小a告訴店員要吃什麼味道的冰淇淋。

* 之後,小a開始等待,店員開始做

* 店員做好了交給小a,開始吃。

** 這個例子就是2個執行緒之間的通訊模擬,小a是乙個執行緒,店員是另外乙個執行緒

* 很顯然這兩個執行緒是不可以同時進行的,所以在設計程式的時候我們需要考慮執行緒安全問題。

* 小a等待的時候我們可以使用鎖物件的wait方法

* 店員做完交給小a可以使用鎖物件的notify方法(notifyall可以喚醒該物件鎖所有等待的執行緒)

** 注意:wait和notify只有鎖物件可以呼叫。**/

public class demo01

}

顧客實現類:

package cn.dali3.code06;

public class runnableimpl1 implements runnable

@override

public void run() catch (interruptedexception e)

system.out.println("我要開吃了");//被喚醒後開始吃聖代}}

}}

店員實現類

package cn.dali3.code06;

**/*這裡注意:

* 為什麼我們要把5s的延遲寫在同步**塊的外面,

* 假設,我們第乙個迴圈結束,店員該呼叫notify喚醒顧客了,這個時候,如果**塊外面沒有休眠

* 他們兩個會爭奪cpu的使用權,很可能在顧客執行緒沒進行之前就開始做冰淇淋了。*/**

public class runnableimpl2 implements runnable

@override

public void run() catch (interruptedexception e)

synchronized (obj) }}

}

執行緒等待與喚醒

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

執行緒的等待與喚醒

等待喚醒機制 需要用到的方法 wait 執行緒不在活動,不在參與排程,進入wait set中,因此不會去浪費cpu資源,也不會競爭鎖,這是的執行緒狀態為waiting,它需要別的執行緒執行notify操作,這個執行緒才從wait set 中釋放出來,重新回到排程佇列中。notify 選中所通知物件的...

執行緒等待喚醒機制

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