導航:首頁 > 編程語言 > 消費者生產者問題java

消費者生產者問題java

發布時間:2025-08-28 20:54:59

java多線程關於消費者和生產者,求源程序,求大神解答。願意提高報酬

自己看代碼體會吧

importjava.util.concurrent.BlockingQueue;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;
importjava.util.concurrent.LinkedBlockingQueue;

publicclassBlockingQueueTest{
publicstaticvoidmain(String[]args){
ExecutorServiceservice=Executors.newCachedThreadPool();
BlockingQueue<String>blockingQueue=newLinkedBlockingQueue<String>(100);
System.out.println("blockingQueuenowcontains"+blockingQueue.size()+"unit");
service.submit(newConsumer1(blockingQueue));
gap(blockingQueue);
service.submit(newProctor2(blockingQueue));
gap(blockingQueue);
service.submit(newProctor3(blockingQueue));
gap(blockingQueue);
service.submit(newProctor4(blockingQueue));
gap(blockingQueue);
service.submit(newProctor5(blockingQueue));
gap(blockingQueue);

service.shutdown();
}
privatestaticvoidgap(BlockingQueue<String>blockingQueue){
try{
Thread.sleep(1000);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
System.out.println("blockingQueuenowcontains"+blockingQueue.size()+"unit");
}
}
{
BlockingQueue<String>blockingQueue;

publicConsumer1(BlockingQueue<String>blockingQueue){
super();
this.blockingQueue=blockingQueue;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("Consumer1start:need10units");
for(inti=0;i<10;i++){
try{
blockingQueue.take();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("Consumer1end:hasgot10units");
}

}
{
BlockingQueue<String>blockingQueue;

publicProctor2(BlockingQueue<String>blockingQueue){
super();
this.blockingQueue=blockingQueue;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("Proctor2start:put5units");
for(inti=0;i<5;i++){
try{
blockingQueue.put("Object");
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("Proctor2end:hasput5units");
}

}
{
BlockingQueue<String>blockingQueue;

publicProctor3(BlockingQueue<String>blockingQueue){
super();
this.blockingQueue=blockingQueue;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("Proctor3start:put5units");
for(inti=0;i<5;i++){
try{
blockingQueue.put("Object");
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("Proctor3end:hasput5units");
}

}
{
BlockingQueue<String>blockingQueue;

publicProctor4(BlockingQueue<String>blockingQueue){
super();
this.blockingQueue=blockingQueue;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("Proctor4start:put100units");
for(inti=0;i<100;i++){
try{
blockingQueue.put("Object");
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("Proctor4end:hasput100units");
}

}
{
BlockingQueue<String>blockingQueue;

publicProctor5(BlockingQueue<String>blockingQueue){
super();
this.blockingQueue=blockingQueue;
}
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("Proctor5start:put10units");
for(inti=0;i<100;i++){
try{
blockingQueue.put("Object");
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("Proctor5end:hasput10units");
}

}

每個線程是隔了1s啟動的, 結果

blockingQueue now contains 0 unit
Consumer1 start: need 10 units
blockingQueue now contains 0 unit
Proctor2 start: put 5 units
Proctor2 end: has put 5 units
blockingQueue now contains 0 unit
Proctor3 start: put 5 units
Proctor3 end: has put 5 units
Consumer1 end: has got 10 units
blockingQueue now contains 0 unit
Proctor4 start: put 100 units
Proctor4 end: has put 100 units
blockingQueue now contains 100 unit
Proctor5 start: put 10 units
blockingQueue now contains 100 unit

⑵ Java中notify和notifyAll的區別

notify方法只喚醒一個等待(對象的)線程並使該線程開始執行。所以如果有多個線程等待一個對象李逗,這個方法只會喚醒其中一個線程,選擇哪個線程取決於操作系統對哪肢賣多線程管理的實現。notifyAll 會喚醒所有等待(對象的)線程,盡管哪一個線程將會第一個處理取決於操作系統的實現。這些方法可以使用於「生產者-消費者」問題,消費者是在隊列中等待對象的線程,生產者是在隊列中釋飢沖放對象並通知其他線程的線程。

閱讀全文

與消費者生產者問題java相關的資料

熱點內容
備份與加密 瀏覽:623
用什麼app可以看論壇 瀏覽:52
javajdbcmysql連接 瀏覽:469
製作linux交叉編譯工具鏈 瀏覽:751
編程負數除以正數 瀏覽:510
app和aso有什麼區別 瀏覽:326
手機vmap是什麼文件夾 瀏覽:36
塔科夫鎖服如何選擇伺服器 瀏覽:290
消費者生產者問題java 瀏覽:60
程序員筱柒顧默結婚的時候 瀏覽:576
安卓截長屏怎麼弄 瀏覽:474
優信辦理解壓手續怎麼那麼慢 瀏覽:604
私有雲伺服器一體機安全嗎 瀏覽:429
python的tk界面禁用滑鼠 瀏覽:185
怎麼看伺服器mac地址 瀏覽:291
安卓如何將圖鏡像翻轉 瀏覽:325
操作系統設計與實現pdf 瀏覽:547
長虹空調遙控什麼app 瀏覽:739
四軸外圓編程教程 瀏覽:947
vb在線編譯環境 瀏覽:886