Java并发编程:生产者消费者模式
来源:互联网 发布:细说php csdn 编辑:程序博客网 时间:2024/05/05 23:37
生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者向空间里存放数据,而消费者取用数据。
下面是代码实现:
package com.easyliu.producerconsumer;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingQueue;// 生产者class Producer implements Runnable {private LinkedBlockingQueue<Object> queue;public Producer(LinkedBlockingQueue<Object> queue) {this.queue = queue;}@Overridepublic void run() {while (true) {// 死循环try {Object o = new Object();queue.put(o);System.out.println("Producer: " + o);} catch (InterruptedException e) {System.out.println("Producer is interrupted!");}}}}// 消费者class Consumer implements Runnable {private LinkedBlockingQueue<Object> queue;public Consumer(LinkedBlockingQueue<Object> queue) {this.queue = queue;}@Overridepublic void run() {while (true) { // 死循环try {Object o = queue.take();System.out.println("Consumer: " + o);} catch (InterruptedException e) {System.out.println("Consumer is interrupted!");}}}}public class ProducerConsumer {public static void main(String[] args) {LinkedBlockingQueue<Object> queue = new LinkedBlockingQueue<Object>(10);ExecutorService es = Executors.newFixedThreadPool(6);for (int i = 0; i < 3; i++) {es.execute(new Producer(queue));es.execute(new Consumer(queue));}}}
在并发编程中,一般推荐使用阻塞队列,这样实现可以尽量地避免程序出现意外的错误。
阻塞队列使用最经典的场景就是socket客户端数据的读取和解析,读取数据的线程不断将数据放入队列,然后解析线程不断从队列取数据解析。还有其他类似的场景,只要符合生产者-消费者模型的都可以使用阻塞队列。
0 0
- Java并发编程 生产者消费者模式
- Java并发编程:生产者-消费者模式
- Java并发编程:生产者消费者模式
- Java并发编程:阻塞队列及实现生产者-消费者模式
- Java并发编程系列之十三:生产者-消费者模式
- 使用BlockingQueue构建生产者消费者模式(java并发编程5.3)
- Java并发编程与技术内幕:消费者-生产者模式研究
- Java并发编程与技术内幕:消费者-生产者模式研究
- Java并发编程与技术内幕:消费者-生产者模式研究
- 【并发编程】生产者与消费者模式
- Java并发学习--生产者/消费者模式
- java并发包:生产者消费者模式
- 阻塞队列 生产者-消费者模式 窃取工作模式(java并发编程实践读书笔记二)
- Java 并发编程(四)阻塞队列和生产者-消费者模式
- Java并发编程深入学习——生产者-消费者模式多种实现方式
- 并发编程之生产者消费者
- 并发编程(12)-生产者消费者
- linux进程并发模型生产者和消费者模式编程
- hadoop 打jar包,在linux下运行
- eclipse编码格式设置
- 我心目中的C
- Maven中Spring-Data-Redis存储对象(redisTemplate)
- JVM的内存区域划分
- Java并发编程:生产者消费者模式
- 蓝桥杯 李白打酒 递归
- UESTC 1012-Ladygod【没有负数】
- Java编程细节注意
- 蓝桥杯 带分数
- python提取包含关键字的整行数据
- Android模拟器BlueStacks的使用
- 无聊总结下
- PAT 乙级 1014. 福尔摩斯的约会