日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

阻塞队列,来写生产者消费者,生产一个消费一个

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阻塞队列,来写生产者消费者,生产一个消费一个 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用阻塞隊列來寫,就不需要程序員來關心什么時候阻塞線程await,什么時候喚醒線程notify()。

類似消息中間件

package JUC;import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger;/*** 3.0版生產者消費者(不用程序員控制,用阻塞隊列)*/ class MyResource{private volatile boolean FLAG = true; //默認打開,進行生產+消費private AtomicInteger atomicInteger = new AtomicInteger(1);//BlockingQueue如果要適配所有類的話,要傳接口,不能傳類BlockingQueue<String> blockingQueue = null;public MyResource(BlockingQueue<String> blockingQueue) {this.blockingQueue = blockingQueue;System.out.println(blockingQueue.getClass().getName()); //顯示傳的什么類}public void myProducer() throws Exception{String data = null;boolean retValue;while(FLAG){data = atomicInteger.getAndIncrement()+"";retValue = blockingQueue.offer(data,2L, TimeUnit.SECONDS);if (retValue){System.out.println(Thread.currentThread().getName()+"\t 插入隊列"+data+"成功");}else {System.out.println(Thread.currentThread().getName()+"\t 插入隊列"+data+"失敗");}TimeUnit.SECONDS.sleep(1);}System.out.println(Thread.currentThread().getName()+"\t大老板叫停,表示FLAG=false,生產動作結束");}public void myConsumer() throws Exception{String result = null;while (FLAG){result = blockingQueue.poll(2L,TimeUnit.SECONDS);if (result == null || result.equalsIgnoreCase("")){FLAG = false;System.out.println(Thread.currentThread().getName()+"\t超過2秒鐘沒有取到蛋糕,消費退出");return;}System.out.println(Thread.currentThread().getName()+"\t消費隊列"+result+"成功");}}public void stop() throws Exception{this.FLAG = false;} } public class ProdConsumer_BlockQueueDemo {public static void main(String[] args) {MyResource myResource = new MyResource(new ArrayBlockingQueue<>(3));new Thread(()->{System.out.println(Thread.currentThread().getName()+"\t生產線程啟動");try {myResource.myProducer();} catch (Exception e) {e.printStackTrace();}},"producer").start();new Thread(()->{System.out.println(Thread.currentThread().getName()+"\t消費線程啟動");System.out.println();System.out.println();try {myResource.myConsumer();System.out.println();System.out.println();} catch (Exception e) {e.printStackTrace();}},"consumer").start();try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}System.out.println();System.out.println();System.out.println("5秒鐘時間到,大老板main線程叫停,游戲結束!");try {myResource.stop();} catch (Exception e) {e.printStackTrace();}} }

總結

以上是生活随笔為你收集整理的阻塞队列,来写生产者消费者,生产一个消费一个的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。