使用阻塞队列实现生产者-消费者模式——Java实现
来源:互联网 发布:淘宝手机详情页宽度 编辑:程序博客网 时间:2024/06/07 23:52
阻塞队列是一种基于数组实现的阻塞队列,它在构造时需要指定容量。当试图向满队列中添加元素或者从空队列中移除元素时,当前线程会被阻塞。通过阻塞队列,我们可以按以下模式来工作:工作者线程可以周期性的将中间结果放入阻塞队列中,其它线程可以取出中间结果并进行进一步操作。若工作者线程的执行比较慢(还没来得及向队列中插入元素),其他从队列中取元素的线程会等待它(试图从空队列中取元素从而阻塞);若工作者线程执行较快(试图向满队列中插入元素),则它会等待其它线程取出元素再继续执行。
—— 引自:点击打开链接
Java代码:
import java.util.concurrent.ArrayBlockingQueue;public class BlockingQeueTest {private int size = 20;// 使用阻塞队列,阻塞队列是一个基于数组实现的阻塞队列,它在构造时,需要指定容量。当试图向满队列中添加元素或者从空队列中移除元素时,// 当前线程会被阻塞。通过阻塞队列,我们可以按照以下模式来工作:生产者线程可以周期性地将一些数据放入阻塞队列中,消费者线程可以从阻塞队列中// 取出数据进行处理。若生产者线程执行的比较慢,消费者线程会等待它(试图从空队列中取元素而阻塞);// 若生产者线程执行的比较快(试图向满队列中插入元素),则它会等待其他线程取出元素再继续生产。private ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<>(size);public static void main(String[] args) {BlockingQeueTest test = new BlockingQeueTest();Producer producer = test.new Producer();Consumer consumer = test.new Consumer();producer.start();consumer.start();}class Consumer extends Thread {@Overridepublic void run() {while (true) {try {// 从阻塞队列中取出一个元素queue.take();System.out.println("队列剩余" + queue.size() + "个元素!");} catch (Exception e) {}}}}class Producer extends Thread {@Overridepublic void run() {while (true) {try {// 向阻塞队列中插入一个元素queue.put(1);System.out.println("队列剩余空间:" + (size - queue.size()));} catch (Exception e) {}}}}}
0 0
- 使用阻塞队列实现生产者-消费者模式——Java实现
- java使用阻塞队列实现生产者消费者模式
- Java设计模式—生产者消费者模式(阻塞队列实现)
- Java设计模式—生产者消费者模式(阻塞队列实现)
- Java设计模式—生产者消费者模式(阻塞队列实现)
- 阻塞队列实现生产者消费者模式
- 阻塞队列---实现生产者消费者模式
- 阻塞队列实现生产者消费者模式
- 阻塞队列实现生产者消费者模式
- 阻塞队列实现生产者消费者模式
- 阻塞队列实现生产者消费者模式
- 生产者-消费者模式(阻塞队列实现)
- 阻塞队列实现生产者消费者模式
- 阻塞队列实现的生产者/消费者模式
- 消费者生产者模式(2)——用java阻塞队列实现
- Java生产者-消费者模式的非阻塞队列实现
- Java生产者-消费者模式的阻塞队列实现
- JAVA 阻塞队列实现 生产者和消费者 模式
- 世界坐标转换为NGUI坐标办法举例
- 克隆二叉树
- 数论 欧几里得
- Netpref Test的使用
- 插入排序&希尔排序—思路及实现
- 使用阻塞队列实现生产者-消费者模式——Java实现
- 一篇SSM框架整合友好的文章(二)
- 输出以下的杨辉三角形
- Tomcat servlet工作原理
- LeetCode073 Set Matrix Zeroes
- manifest文件的常用配置项
- 动态规划 24题
- 修饰符
- LeetCode074 Search a 2D Matrix