解決執行緒之間通訊問題的方法
解決方法1
併發協作模型「生產者/消費者模式」—>管程法
//測試:生產者/消費者模式--->利用緩衝區解決:管程法
//生產者 消費者 產品 緩衝區
public
class
testpc
}//生產者
class
producftor
extends
thread
//生產
@override
public
void
run()}
}//消費者
class
consumer
extends
thread
//消費
@override
public
void
run()}
}//產品
class
chicken
}//緩衝區
class
syncontainer
catch
(interruptedexception e)
}//如果沒有滿,我們就需要丟入產品
chickens[count]
= chicken;
count++
;//可以通知消費者消費了
this
.notifyall()
;}//消費者消費產品
public
synchronized chicken pop()
catch
(interruptedexception e)
}//如果可以消費
count--
; chicken chicken = chickens[count]
;//吃完了,通知消費者生產
this
.notifyall()
;return chicken;
}}
解決方法2
併發協作模型「生產者/消費者模式」—>訊號燈法 標誌位解決
//測試:生產者/消費者模式--->訊號燈法,標誌位解決
public
class
testpc2
}//生產者--->演員
class
player
extends
thread
@override
public
void
run(
)else}}
}//消費者--->觀眾
class
watcher
extends
thread
@override
public
void
run()}
}//產品--->節目
class
tvcatch
(interruptedexception e)
} system.out.
println
("演員表演了:"
+ voice)
;//通知觀眾**
this
.notify()
;//通知喚醒
this
.voice = voice;
this
.flag =
!this
.flag;
}//**
public
synchronized
void
watch()
catch
(interruptedexception e)
} system.out.
println
("**了:"
+ voice)
;//通知演員表演
this
.notify()
;this
.flag =
!this
.flag;
}}
執行緒通訊 生產者 消費者模式
恢復內容開始 執行緒是作業系統中獨立的個體,但這些個體之間如果沒有特殊的處理就不能成為乙個整體。而執行緒間的通訊機制就是成為整體的必用方案。執行緒間的通訊會使系統的互動性更強,在提高cpu利用率的同時還會使程式設計師對各執行緒任務在處理的過程中進行有效的把控和監督。等待 通知機制 執行緒之間不是獨立...
執行緒 執行緒間通訊(生產者消費者模式)
注意 1.執行緒間的通訊,共享的資料一定要有同步 塊synchronized 2.一定要有wait和notify,而且二者一定是成對出現 3.生產者和消費者的執行緒實現一定是在while true 裡面public class basket public void setempty boolean ...
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...