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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

用BlockingQueue实现生产者与消费者问题

發布時間:2024/9/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用BlockingQueue实现生产者与消费者问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.生產者與消費者問題:

生產者生成一定量的數據放到緩沖區中,然后重復此過程;與此同時,消費者也在緩沖區消耗這些數據。生產者和消費者之間必須保持同步,要保證生產者不會在緩沖區滿時放入數據,消費者也不會在緩沖區空時消耗數據

2.BlockQueue原理:

BlockingQueue 是線程安全的,并且在調用 put,take 方法時會阻塞線程,超過指定容量時,用put時會進行阻塞,沒有元素時,利用take會進行阻塞

3.代碼實現

package 生產者與消費者問題_BlockingQueue實現;import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue;public class Main {public static final BlockingQueue<Integer> queue=new ArrayBlockingQueue<Integer>(10);static int i=0;public static void main(String[] args) {Producer producer=new Producer();Consumer consumer=new Consumer();producer.start();consumer.start();}static class Producer extends Thread{@Overridepublic void run() {while (true){try {queue.put(i);//隊列滿的話,put會阻塞當前線程System.out.println("生產元素:"+i++);Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}static class Consumer extends Thread{@Overridepublic void run() {while (true){try {int res=queue.take();//隊列為空的話,會阻塞線程System.out.println("消費元素:"+res);Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}}} }

4.執行結果如下

生產者生產的快一些,當15之后,隊列滿了,必須等待消費者消費完成之后才能繼續執行,兩者的差值為指定容量的長度

總結

以上是生活随笔為你收集整理的用BlockingQueue实现生产者与消费者问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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