package com.szc.java;/*** @Author szc* @Date 2021/8/24*/
//缓冲区(售货员)
class Clerk {private int quantity=0;public int getQuantity() {return quantity;}//当货物数量为20(满)时,唤醒消费者进程,并使得生产者进程阻塞。public synchronized void Purchase(){notify();while (quantity == 20){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}quantity++;}//当货物数量为0时,唤醒生产者进程,并使得消费者进程阻塞。public synchronized void Sale(){notifyAll();while (quantity == 0){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}quantity--;}}
//生产者进程
class  Producer implements Runnable{private Clerk clerk;public Producer(Clerk clerk) {this.clerk = clerk;}@Overridepublic void run() {while (true) {synchronized (clerk) {try {Thread.sleep(150);} catch (InterruptedException e) {e.printStackTrace();}clerk.Purchase();int x = clerk.getQuantity();System.out.println(Thread.currentThread().getName() + "生产了第" + x + "个产品");}}}
}
//消费者进程
class Consumer implements Runnable{private Clerk clerk;public Consumer(Clerk clerk) {this.clerk = clerk;}@Overridepublic void run() {while (true) {synchronized (clerk) {try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}clerk.Sale();int x = clerk.getQuantity()+1;System.out.println(Thread.currentThread().getName() + "消费了第" + x + "个产品");}}}
}
//主函数
public class Pipeline {public static void main(String[] args) {Clerk clerk = new Clerk();Producer producer = new Producer(clerk);Consumer consumer = new Consumer(clerk);Thread p1 = new Thread(producer);Thread c1 = new Thread(consumer);Thread c2 = new Thread(consumer);p1.setName("生产者1");c1.setName("消费者1");c2.setName("消费者2");p1.start();c1.start();c2.start();}}

生产者消费者模式Java实现相关推荐

  1. java lock condition_Java 通过 Lock 和 竞争条件 Condition 实现生产者消费者模式

    更多 Java 并发编程方面的文章,请参见文集<Java 并发编程> 竞争条件 多个线程共享对某些变量的访问,其最后结果取决于哪个线程偶然在竞争中获胜. condition.await() ...

  2. java消费者模式_基于Java 生产者消费者模式(详细分析)

    生产者消费者模式是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗.虽然它们任务不同,但处理的资源是相 ...

  3. Java并发编程实战~生产者-消费者模式

    前面我们在<Worker Thread 模式>中讲到,Worker Thread 模式类比的是工厂里车间工人的工作模式.但其实在现实世界,工厂里还有一种流水线的工作模式,类比到编程领域,就 ...

  4. java消费者生产者设计模式_java 多线程并发设计模式之四: 生产者消费者模式

    生产者消费者模式是一个经典的多线程设计模式,其核心思想是:有两类线程和一个内存缓冲区或者队列, 一类线程发起任务,并提交到队列中.另一类线程用来处理这些任务,叫做消费者线程. 这两类线程进行通信的桥梁 ...

  5. java 消费者模式 多线程_[Java并发-24-并发设计模式] 生产者-消费者模式,并发提高效率...

    生产者 - 消费者模式在编程领域的应用非常广泛,前面我们曾经提到,Java 线程池本质上就是用生产者 - 消费者模式实现的,所以每当使用线程池的时候,其实就是在应用生产者 - 消费者模式. 当然,除了 ...

  6. 菜鸟学习笔记:Java提升篇8(线程2——线程的基本信息、线程安全、死锁、生产者消费者模式、任务调度)

    菜鸟学习笔记:Java提升篇8(线程2--线程的基本信息.线程安全.死锁.生产者消费者模式.任务调度) 线程的基本信息 线程同步 线程安全 死锁 生产者消费者模式 任务调度(了解) 线程的基本信息 J ...

  7. 生产者消费者模式-java原生、Disruptor实现方案

    生产者消费者模式介绍 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题.生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻 ...

  8. java consumed_Java设计模式—生产者消费者模式(阻塞队列实现)

    生产者消费者模式是并发.多线程编程中经典的 真实世界中的生产者消费者模式 生产者和消费者模式在生活当中随处可见,它描述的是协调与协作的关系.比如一个人正在准备食物(生产者),而另一个人正在吃(消费者) ...

  9. Java(二十二) -- 生产者消费者模式

    目录 生产者消费者模式 汉堡类 容器类 生产者 消费者 测试类 案例:多线程并发卖票 生产者消费者模式 在一个生产环境中,生产者和消费者在同一时间段内共享同一块缓冲区,生产者负责向缓冲区添加数据,消费 ...

最新文章

  1. Vlan 4096的限制原因
  2. Linux学习之路-Linux-yum命令【8】---20171217
  3. vb.net 正则 替换 第n个_Python中正则表达式模块详解
  4. 如何用Fiddler对手机(安卓/iOS)数据进行抓包
  5. 重新定义旅游网站,米胖新版发布
  6. android封装oauth2,Android AccountAuthenticator和OAuth2
  7. The slave I/O thread stops(equal MySQL server ids)
  8. 【BZOJ - 3036】绿豆蛙的归宿(概率DAG图dp,拓扑排序,概率dp,期望的线性性)
  9. python读txt文件报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode
  10. 面试被问到会不会移动端_问题解答 | 盘点教师资格证面试时一般会问到的问题...
  11. HTML5 中定位问题
  12. IAR常用快捷键及技巧
  13. 20155207 2016-2017-2 《Java程序设计》第七周学习总结
  14. 西门子1200跟V90伺服总线通讯①_设置V90
  15. c语言扩展欧几里得算法编程实现,C语言实现欧几里得算法与扩展欧几里得算法.doc...
  16. WORD文档不能打开的一些原因
  17. 肿瘤基因组学数据库终结者:cBioPortal---转载
  18. Unreal Engine 4 控制台命令参数合集
  19. GTP-3算法是一种“暴力美学”的胜利
  20. excel中利用综合应用len(),lenb(),left() ,find()函数筛选汉字问题

热门文章

  1. 为了成长,我豁出去了!同程苏州,我来了!
  2. Python 中堪称神仙的6个内置函数
  3. mysql数据库审计agent_数据库审计-数据库审计系统功能-安华金和
  4. iOS 14.5有点牛:戴口罩也能解锁iPhone 12!
  5. App性能测试——使用GT监控手机流量
  6. 鸿蒙未识绮罗香,《贫女·蓬门未识绮罗香》阅读答案与解析-秦韬玉
  7. linux命令之查看ip地址
  8. 联想集团创始人柳传志为何选择在75岁时退休?新一任会是谁?
  9. 建站百科|「联系我们」页面设计指南(内附案例)
  10. 分析师:一季度特斯拉电动汽车产量和交付量将低于华尔街预期