经典的生产者消费者模型(二)
来源:互联网 发布:情侣礼物知乎 编辑:程序博客网 时间:2024/05/22 14:49
package com.zzj.concurrency;import java.util.LinkedList;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class ProducerConsumerModel2 {private final LinkedList<String> queue = new LinkedList<>(); private final int max = 3;private Lock lock = new ReentrantLock();private Condition producer = lock.newCondition();private Condition consumer = lock.newCondition();public void put(String e) {try {lock.lock();while(queue.size() == max){ // 此处不能用if判断producer.await();}queue.add(e);consumer.signalAll(); // 通知消费者消费} catch (InterruptedException e1) {e1.printStackTrace();} finally {lock.unlock();}}public String get(){String r = null;try {lock.lock();while(queue.size() == 0){ // 此处不能用if判断consumer.await();}r = queue.removeFirst();producer.signalAll(); // 通知生产者生产} catch (InterruptedException e) {e.printStackTrace();} finally {lock.unlock();}return r;}public static void main(String[] args) {final ProducerConsumerModel2 model = new ProducerConsumerModel2();// 启动5生产者for (int i = 0; i < 5; i++) {new Thread(new Runnable() {public void run() {for(int j = 0; j < 10; j++){model.put(Thread.currentThread().getName() + "-" + j);}}}, "producer-" + i).start();}// 启动10消费者for (int i = 0; i < 10; i++) {new Thread(new Runnable() {public void run() {for(int j = 0; j < 5; j++){System.out.println(model.get());}}}, "consumer-" + i).start();}}}
输出结果:
producer-0-0producer-3-0producer-3-1producer-3-2producer-3-3producer-0-1producer-3-4producer-4-0producer-4-1producer-4-2producer-1-0producer-1-2producer-1-1producer-1-3producer-3-5producer-3-6producer-0-2producer-4-3producer-4-4producer-4-5producer-1-4producer-1-6producer-1-5producer-1-7producer-0-3producer-3-7producer-0-4producer-4-6producer-1-8producer-1-9producer-3-8producer-0-5producer-2-0producer-3-9producer-0-6producer-0-7producer-0-8producer-0-9producer-2-1producer-2-2producer-2-3producer-4-8producer-4-9producer-2-4producer-4-7producer-2-5producer-2-6producer-2-7producer-2-8producer-2-9
阅读全文
0 0
- 经典的生产者消费者模型(二)
- 经典的生产者消费者模型(一)
- 经典:生产者消费者模型
- Kafka消费者生产者编程模型(二)
- 生产者与消费者模型(二)
- 经典软件设计模型 - 生产者消费者模型
- 生产者/消费者模式(阻塞队列) 一个经典的并发模型
- 经典的消费者生产者模型——基于BlockingQueue
- 生产者/消费者模式(阻塞队列) 一个经典的并发模型
- 生产者/消费者模式(阻塞队列) 一个经典的并发模型
- 经典的生产者与消费者模型(基于synchronized方法实现)
- 经典的生产者与消费者模型(基于BlockingQueue队列实现)
- 线程同步之经典生产者-消费者模型
- JS实现经典生产者消费者模型
- 经典的生产者消费者-----多线程
- 生产者-消费者的经典例子
- 真实的生产者-消费者模型
- 生产者与消费者的模型
- C语言面向对象之STL库--Vector
- 莫比乌斯反演
- 51例程---跑马灯
- Android TextView中怎么改变某个字体的颜色
- Java内存模型与线程
- 经典的生产者消费者模型(二)
- NOIP模拟(10.26)T3 大逃杀
- Java多线程系列-多线程合集3
- 二叉树前序 中序 后序
- 171026-用for语句画正方形(2)【连续第三天】
- eclipse Failed to create the part's controls 解决方法
- IDEA的快捷键
- linux qt+windows mfc利用socket传送消息
- ios 学习视频 资源