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 包子已經做好了...