學習部落格 執行緒的等待喚醒機制 賣包子案例

2021-10-08 17:54:59 字數 2040 閱讀 1079

//wait() ; / /使用了wait就等待了。立即釋放鎖。將來醒過來的時候,是從這裡醒過來的時候

// b.notify(); 喚醒執行緒的方法

主方法:

package cn.zsp.thread_03;

//wait() ; / /使用了wait就等待了。立即釋放鎖。將來醒過來的時候,是從這裡醒過來的時候

public

class

baozidemo

}

包子引數的類,這裡沒有封裝是為了方便:

package cn.zsp.thread_03;

public

class

baozitype

一號包子的消費情況:

package cn.zsp.thread_03;

public

class

consumebaozi1

implements

runnable

public

consumebaozi1

(baozitype b)

@override

public

void

run(

)catch

(interruptedexception e)

synchronized

(b)catch

(interruptedexception e)

} system.out.

println

("肉包子賣出去了乙個");

b.number1--

; b.

notify()

;}}}

}

package cn.zsp.thread_03;

public

class

consumebaozi2

implements

runnable

public

consumebaozi2

(baozitype b)

消費二號包子:

public

void

run(

)catch

(interruptedexception e)

synchronized

(b)catch

(interruptedexception e)

} system.out.

println

("菜包賣出去了乙個");

b.number2--

; b.

notify()

;}}}

}

消費三號包子:

package cn.zsp.thread_03;

public

class

producebaozi

implements

runnable

public

producebaozi

(baozitype b)

@override

public

void

run(

)catch

(interruptedexception e)

synchronized

(b)catch

(interruptedexception e)

} system.out.

println

("現在肉包子有"

+b.number1+

"個 菜包子有"

+b.number2+

"個")

; b.number1 +=1;

b.number2 +=1;

b.notify()

;}}}

}

執行緒等待喚醒機制

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

執行緒的等待喚醒機制

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

java 多執行緒 等待喚醒機制

package thread執行緒 生產者消費者問題 問題1 為什麼要用while而不用if進行判斷 因為是多執行緒在操作同一資源,即有多個生產者也有多個消費者,如果用if進行判斷的話會出現生產者生產連續生產多次,而消費者只消費 消費一次,或生產者生產一次消費者消費多次的錯誤資訊,這是為什麼呢?原因...