用BlockingQueue实现生产者与消费者问题
生活随笔
收集整理的這篇文章主要介紹了
用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实现生产者与消费者问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 的Comparator比较器用
- 下一篇: Java实现有向图的拓扑排序