生產者-消費者(producer-consumer)問題,也稱作有界緩衝區(bounded-buffer)問題,兩個程序共享乙個公共的固定大小的緩衝區。其中乙個是生產者,用於將訊息放入緩衝區;另外乙個是消費者,用於從緩衝區中取出訊息。問題出現在當緩衝區已經滿了,而此時生產者還想向其中放入乙個新的資料項的情形,其解決方法是讓生產者此時進行休眠,等待消費者從緩衝區中取走了乙個或者多個資料後再去喚醒它。同樣地,當緩衝區已經空了,而消費者還想去取訊息,此時也可以讓消費者進行休眠,等待生產者放入乙個或者多個資料時再喚醒它。
一,首先定義公共資源類,其中的變數number是儲存的公共資料。並且定義兩個方法,增加number的值和減少number的值。由於多執行緒的原因,必須加上synchronized關鍵字,注意while判斷的條件。
packagecom.wjy.resources;
public
class
publicresource
catch
(interruptedexception e)
} number++;
system.out.println("producer "+threadname+" product one: "+number);
notify();
} /*** 減少公共資源
*/public
synchronized
void
decreace(string threadname)
catch
(interruptedexception e)
} number--;
system.out.println("consumer "+threadname+" consume one: "+number);
notify();
} }
二,分別定義生產者執行緒和消費者執行緒,並模擬多次生產和消費,即增加和減少公共資源的number值
packagecom.wjy.producer;
import
com.wjy.resources.publicresource;
public
class producerthread implements
runnable
@override
public
void
run()
catch
(interruptedexception e)
resource.increace(threadname);
} }
}
packagecom.wjy.consumer;
import
com.wjy.resources.publicresource;
public
class consumerthread implements
runnable
@override
public
void
run()
catch
(interruptedexception e)
resource.decreace(threadname);
} }
}
三,模擬多個生產者和消費者操作公共資源的情形,結果須保證是在允許的範圍內。
packageclient;
import
com.wjy.consumer.consumerthread;
import
com.wjy.producer.producerthread;
import
com.wjy.resources.publicresource;
/*** this is an example that has three producers,two consumers. */
public
class
client
}
生產者消費者問題(java實現)
1 生產者 消費者模型 若容器容量為1 生產者執行緒 if a 1 a notify 消費者 if a 0 a notify 2 下面是乙個 實現 簡單的快取容量只有1,即 若容器中有乙個了,就不能再生產了 1 最基本的寫法 資源類 public class sample catch interru...
Java消費者生產者問題
乙個執行緒作為生產者,乙個執行緒作為消費者。生產者和消費者在同時執行。生產者每生產一次消費者就消費一次。生產和消費的數量用隨機數來表示。要求 生產者的數量和上次消費後的剩餘數量和不大於1000.sleep 可以指定休眠的時間,如果沒有其他操作,那麼到點自然醒。如果sleep有鎖資源,那麼不釋放 執行...
java生產者消費者
題目 請用多執行緒實現乙個生產者類和乙個消費者類,生產者隨機生成20個字元,消費者將字元列印到控制台。class syncstackcatch interruptedexception e this.notify 通知其它執行緒把資料出棧 buffer index c 資料入棧 index 指標向上...