Java多线程生产者与消费者,准确说应该是“生产者-消费者-仓储”模型,使用了仓储,使得生产者消费者模型就显得更有说服力。
对于此模型,应该明确一下几点:
1、生产者仅仅在仓储未满时候生产,仓满则停止生产。
2、消费者仅仅在仓储有产品时候才能消费,仓空则等待。
3、当消费者发现仓储没产品可消费时候会通知生产者生产。
4、生产者在生产出可消费产品时候,应该通知等待的消费者去消费。

一、仓库
可以选择有线程安全的PriorityBlockingQueue也可以使用普通的list,为了更加体现多线程这里使用没有线程安全的普通list

private static LinkedList<String> list = new LinkedList<String>();

使用LinkedList是因为删除时更加方便。
二、生产者

/*** 生产者* * @author Administrator* */static class ProductThread implements Runnable {private int count = 0;public ProductThread(int count) {this.count = count;}@Overridepublic void run() {while(true){synchronized (list) {if(list.size()>20){//容量达到20以上,等待消费try {list.wait();} catch (InterruptedException e) {e.printStackTrace();}}for(int i = 1;i<count ;i++){System.out.println("生产了一个产品---"+i);list.add("str"+i);}list.notifyAll();}}}}

三、消费者

static class CustomerThread implements Runnable {private int count = 0;public CustomerThread(int count) {this.count = count;}@Overridepublic void run() {while(true){synchronized (list) {if(list.size() < count){System.out.println("容器中数量不够," + list.size());try {list.wait();// 等待} catch (Exception e) {e.printStackTrace();}}for(int i =1;i<=count;i++){String remove = list.remove();System.out.println("消费掉一个产品--"+remove);}list.notify();}}}}

四、测试类

public static void main(String[] args) {// 每次生产10个Thread proTh = new Thread(new ProductThread(10));// 每次消费6个Thread cusTh = new Thread(new CustomerThread(6));proTh.start();cusTh.start();}

这样一个简单的生产者消费者模型就完成了。

Java多线程-生产者与消费者相关推荐

  1. java多线程生产者与消费者问题_Java多线程详解之四:生产者消费者问题

    一.问题描述 生产者消费者问题(Producer-Consumer problem),也称有限缓冲区问题(Bounded-buffer promblem),是一个多线程同步问题的经典案例.对于一个固定 ...

  2. java多线程生产者与消费者案例_多线程操作实例——生产者与消费者

    面对多线程学习生产者与消费者是最基本的实例 对于java后端开发的人员必须要掌握,还有考研考试计算机操作系统的同鞋. 下面是三个实例对于生产者与消费者的的例子,层层递进,逐步解决问题. 问题:生产者- ...

  3. java多线程生产者与消费者问题_java多线程实现生产者与消费者问题

    生产者与消费者多线程实现,首先的问题就是同步,就是关于临界资源的访问 我们首先来定义一个临界资源类,这里设为Q class Q { int z=4; } 这个int型的z就是我假设的临界资源的个数 然 ...

  4. Java 多线程-生产者、消费者

    一.整体代码 ThreadDemo.java public class ThreadDemo { public static void main(String[] args) { Godown god ...

  5. Java多线程-生产者消费者问题(多个消费者多个生产者)

    Java多线程-生产者消费者问题(多个消费者多个生产者) public class ConsumerProcuderDemo {public static void main(String[] arg ...

  6. Java中生产者和消费者总结

    生产者和消费者问题是线程模型中的经典问题,生产者和消费者在同一时间段共用同一个存储空间,这个存储空间是一个缓冲区的仓库,生产者可以将产品放入仓库,消费者可以从仓库中取出产品. 生产者/消费者模型是基于 ...

  7. java多线程 生产者消费者_java多线程之-生产者与消费者

    java多线程之-并发协作[生产者与消费者]模型 对于多线程程序来说,不管c/c++ java python 等任何编程语言,生产者与消费者模型都是最为经典的.也就是可以说多线程的并发协作 对于此模型 ...

  8. Java多线程生产者消费者调度实现

    生产者消费者模型是多线程中最常见的模型,有着广泛的应用.其主要目的是实现一种动态的平衡,让生产者消费者和谐共处,获得最大化的执行效率. 所说的动态平衡其实就是生产者与消费者协作控制仓储,让消费者不至于 ...

  9. Java多线程——生产者消费者问题

    创建多个线程去执行不同的任务,如果这些任务之间有着某种关系,那么线程之间必须能够通信来协调完成工作. 生产者消费者问题(英语:Producer-consumer problem)就是典型的多线程同步案 ...

最新文章

  1. 3、Java常用关键字
  2. 未来人工智能客户服务的5大优势
  3. 笔记-信息系统安全管理-安全审计-作用
  4. 初次面试Java岗位,这些技巧你要知道!
  5. 【贪心】最大连续数列的和
  6. matlab gui实例_App Designer 自学实例8
  7. 有向图的强连通分量,割点与桥
  8. Altium的原理图主题修改为Orcad的默认样式(Altium原理图样式更改)
  9. python坐标系 向量分量_关于Python中的向量相加和numpy中的向量相加效率对比
  10. UVA344 UVALive5452 Roman Digititis【Ad Hoc】
  11. Django | 静态文件处理
  12. 联想小新air13pro重装系统_小新air13pro改win7系统 联想小新air13pro安装win7系统教程...
  13. android怎么实现记住密码功能,Android App“记住密码”功能的实现逻辑
  14. 概率论 方差公式_考研冲刺篇|数学概率论
  15. paypal tp 对接_PayPal支付接入
  16. 【Mybatis学习路线】day01Mybatis概述
  17. 大话设计模式之爱你一万年:第八章 结构型模式:外观(门面)模式:冬天有你不再寒冷:2.外观模式之一键开关
  18. android手机和包支付,和包支付app
  19. 深度学习之学习(3-4)YOLOV4
  20. adc量化单位_高速ADC的关键指标:量化误差、offset/gain error、DNL、INL、ENO...

热门文章

  1. python列表片段_Python列表片段索引操作,python
  2. win32api.sendmessage模拟鼠标点击_安卓模拟器一键宏设置教程
  3. C/Cpp / 类的前向声明、不完全类型和完全类型
  4. 这样一款超低功耗的集成 2.4 GHz Wi-Fi 和支持长距离的 Bluetooth LE 5.0的SOC,你怎么能不爱它?
  5. 频谱扩展 matlab,使用MATLAB进行频谱分析 | 学步园
  6. 一个udp用户数据报的数据字段为8192_基于FPGA的千兆网UDP通信分析
  7. Altium designer--变压器封装图
  8. 虚拟机上怎么配置mysql数据库_Linux虚拟机下安装配置MySQL
  9. top20万_主播收入榜(12.10)| 快手小伊伊收入150万;薇娅抖音快手开账号
  10. android添加动画文件,Android开发之图形图像与动画(五)LayoutAnimationController详解