生產者和消費者問題
生產者和消費者問題 synchronized 版
package com.kuang.pc;
/*** 執行緒之間的通訊問題:生產者和消費者問題!
* 等待喚醒,通知喚醒 執行緒交替執行 a b 操作同乙個變數 num = 0
* * a num+1 b num-1
* */
public
class
acatch
(interruptedexception e)}}
,"a").
start()
;new
thread((
)->
catch
(interruptedexception e)}}
,"b").
start()
;}}// 判斷等待,業務,通知
class
data
number++
; system.out.
println
(thread.
currentthread()
.getname()
+"=>"
+number)
;// 通知其他執行緒,我+1完畢了
this
.notifyall()
;}public
synchronized
void
decrement()
throws interruptedexception
number--
; system.out.
println
(thread.
currentthread()
.getname()
+"=>"
+number)
;// 通知其他執行緒,我-1完畢了
this
.notifyall();}}
輸出
問題存在,a b c d 4 個執行緒! 虛假喚醒
if 改為 while 判斷
package com.kuang.pc;
/*** 執行緒之間的通訊問題:生產者和消費者問題!
* 等待喚醒,通知喚醒 執行緒交替執行 a b 操作同乙個變數 num = 0
* * a num+1 b num-1
* */
public
class
acatch
(interruptedexception e)}}
,"a").
start()
;new
thread((
)->
catch
(interruptedexception e)}}
,"b").
start()
;new
thread((
)->
catch
(interruptedexception e)}}
,"c").
start()
;new
thread((
)->
catch
(interruptedexception e)}}
,"d").
start()
;}}// 判斷等待,業務,通知
class
data
number++
; system.out.
println
(thread.
currentthread()
.getname()
+"=>"
+number)
;// 通知其他執行緒,我+1完畢了
this
.notifyall()
;}public
synchronized
void
decrement()
throws interruptedexception
number--
; system.out.
println
(thread.
currentthread()
.getname()
+"=>"
+number)
;// 通知其他執行緒,我-1完畢了
this
.notifyall();}}
生產者與消費者的虛假喚醒問題
什麼是虛假喚醒?當乙個條件滿足時,喚醒了多個執行緒,其中部分執行緒不能被執行卻執行了 比如操作乙個變數 number初始是0,執行緒a對number進行 1,執行緒b對number進行 1,現在沒有問題。但是,再有執行緒c對number進行 1和執行緒d對number進行 1時,就會出現不只是0和1...
生產者消費者問題
public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...
生產者 消費者問題
在學習程序互斥中,有個著名的問題 生產者 消費者問題。這個問題是乙個標準的 著名的同時性程式設計問題的集合 乙個有限緩衝區和兩類執行緒,它們是生產者和消費者,生產者把產品放入緩衝區,相反消費者便是從緩衝區中拿走產品。生產者在緩衝區滿時必須等待,直到緩衝區有空間才繼續生產。消費者在緩衝區空時必 須等待...