管程法 :使得生產者與消費者通過中間容器(管道)進行資料的互動,而不產生直接的互動。通過生產和消費相互制約,阻塞和喚醒。
三個重要組成部分
//生產者
class
producer
extends
thread
//消費者
class
customer
extends
thread
//中間管道
class
psycontainer
互動的元素,這用乙個類來表示商家賣的是鞋子
class
shoes
}
//如果管道裡面的存放量是有限的,如果超出範圍就不能再往裡面放鞋子,如果沒有庫存就不能繼續購買,這兩個都需要繼續等待,
倉庫沒有鞋子的時候,這時候消費者在等待,一旦生產出了一雙鞋子,這雙鞋子就會被放進倉庫,放進倉庫之後,立即釋放購買者的等待,通知它又可以買鞋子了,
當倉庫是滿的時候,這時候生產者在等待,一旦消費者買了一雙,生產者就會被釋放,又可以繼續生產鞋子。
//中間管道
class
psycontainer
catch
(interruptedexception e)
} shoes[account]
=shoe;
account++
;this
.notifyall()
;}public
synchronized shoes pop()
catch
(interruptedexception e)
} account--
; shoes shoe=shoes[account]
;this
.notifyall()
;return shoe;
}}
生產者和消費者只需要一直在生產的準備當中就可以,讓它停的時候停止,沒有停止命令時不停地生產和消費。
//生產者
class
producer
extends
thread
@override
public
void
run()}
}
//消費者
class
customer
extends
thread
@override
public
void
run()}
}
啟動測試一下
syncontainer sc=
newsyncontainer()
;new
producer
(sc)
.start()
;new
customer
(sc)
.start()
;
執行緒通訊 生產者 消費者模式
恢復內容開始 執行緒是作業系統中獨立的個體,但這些個體之間如果沒有特殊的處理就不能成為乙個整體。而執行緒間的通訊機制就是成為整體的必用方案。執行緒間的通訊會使系統的互動性更強,在提高cpu利用率的同時還會使程式設計師對各執行緒任務在處理的過程中進行有效的把控和監督。等待 通知機制 執行緒之間不是獨立...
多執行緒 生產者消費者
這個就不多說了,直接上 include include using namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0...
多執行緒通訊(生產者,消費者問題)
理解多執行緒通訊,就是要用多執行緒需要有乙個共同的共享資源,通過該共享資源完成執行緒的通訊。例項 工廠 消費者 產品 工廠生產產品,消費者消費產品,產品就成了兩者之間的共享資源 產品的成員屬性 產品名,產品 是否需要生產的標識 public class goods public void setna...