Java中的生产消费者问题
1 package day190109; 2 3 import java.util.LinkedList; 4 import java.util.Queue; 5 import java.util.Random; 6 7 public class 生产消费者ThreadDemo10 { 8 public static void main(String[] args) { 9 //生产消费者模式 10 Queue<Phone> queue = new LinkedList<Phone>(); 11 Producer producer = new Producer(queue,30); 12 Consumers consumers = new Consumers(queue,"李江萍"); 13 Consumers consumers1 = new Consumers(queue,"熊天明"); 14 15 producer.start(); 16 consumers.start(); 17 consumers1.start(); 18 19 } 20 } 21 class Producer extends Thread{ 22 public Queue<Phone> queue; 23 public int max; 24 //构造方法 25 public Producer(Queue<Phone> queue, int max) { 26 this.queue = queue; 27 this.max = max; 28 } 29 30 @Override 31 public void run() { 32 while (true){ 33 synchronized (queue) { 34 try { 35 Thread.sleep(1000); 36 } catch (InterruptedException e) { 37 e.printStackTrace(); 38 } 39 if (queue.size() == max) { //如果生产的商品满啦 40 try { 41 System.out.println("你好!本地库存产品已满!请通知消费之前来消费"); 42 queue.wait();//先不忙生产,让消费者先消费 43 } catch (InterruptedException e) { 44 e.printStackTrace(); 45 } 46 } else { 47 Random r = new Random(); 48 Phone p = new Phone(r.nextInt(7), (double) r.nextInt(2000)); 49 System.out.println("甲方已经生产了1个手机:" + p); 50 queue.offer(p); 51 System.out.println(" 生产后现在的库存是:" + queue.size()+"个"); 52 queue.notifyAll();//通知消费者。可以消费啦 53 } 54 } 55 } 56 } 57 } 58 class Consumers extends Thread{ 59 public Queue<Phone> queue; 60 public String name; 61 //构造方法 62 public Consumers(Queue<Phone> queue, String name) { 63 this.queue = queue; 64 this.name = name; 65 } 66 67 @Override 68 public void run() { 69 while (true) { 70 synchronized (queue) { 71 try { 72 Thread.sleep(1000); 73 } catch (InterruptedException e) { 74 e.printStackTrace(); 75 } 76 if (queue.size() == 0) { 77 try { 78 System.out.println(this.name+"说:“你们本地库存产品严重不足”"); 79 queue.wait(); 80 } catch (InterruptedException e) { 81 e.printStackTrace(); 82 } 83 } else { 84 Phone p = queue.poll(); 85 System.out.println(this.name + "说:我要买1个手机:" + p); 86 System.out.println(" 消费后现在的库存是:" + queue.size()+"个"); 87 queue.notifyAll();//通知生产者可以生产了 88 } 89 } 90 } 91 } 92 } 93 class Phone{ 94 private Integer size; 95 private Double price; 96 97 public Phone(Integer size, Double price) { 98 this.size = size; 99 this.price = price; 100 101 } 102 103 @Override 104 public String toString() { 105 return "手机规格是{" + 106 "尺寸是:" + size + 107 ", 价格是:" + price +"元"+ 108 '}'; 109 } 110 }
转载于:https://www.cnblogs.com/tianming18/p/10245061.html
Java中的生产消费者问题相关推荐
- Java中生产者和消费者总结
生产者和消费者问题是线程模型中的经典问题,生产者和消费者在同一时间段共用同一个存储空间,这个存储空间是一个缓冲区的仓库,生产者可以将产品放入仓库,消费者可以从仓库中取出产品. 生产者/消费者模型是基于 ...
- Java中生产者与消费者问题的演变
想要了解更多关于Java生产者消费者问题的演变吗?那就看看这篇文章吧,我们分别用旧方法和新方法来处理这个问题. 生产者消费者问题是一个典型的多进程同步问题. 对于大多数人来说,这个问题可能是我们在学校 ...
- java中的生产者消费者模式详解
方式 一: Synchronized方式 注:此种方式会造成资源的浪费: 利用锁的notifyAll()方法会将所有的线程都唤醒,会造成资源的浪费 class Resource {private St ...
- Java中notify和notifyAll的区别 - 何时以及如何使用
Java notify vs notifyAll notify和notifyAll方法之间有什么区别是棘手的Java问题之一! Condition 是个什么玩意? 提几个问题,从问题中去了解去学 ...
- java中synchronized同步锁实现生产者消费者模式
synchronized介绍 一.基本概念 synchronized关键字是java里面用来在多线程环境下保证线程安全的同步锁:java里面有对象锁和类锁,对象锁是用在对象实例的方法上或者一个对象实例 ...
- 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. wait, notify 和 noti ...
- java中什么时候应用异常_生产Java应用程序中的十大异常类型-基于1B事件
java中什么时候应用异常 Pareto记录原理:97%的记录错误语句是由3%的唯一错误引起的 在最新的数据整理帖子之后,我们收到了很多反馈和问题,我们发现97%的记录错误是由10个唯一错误引起的 . ...
- java生成者消费者模式,java生产消费者模式
package productiveConsumption2; /* * 面包类 */ public class Bread { private int id; private String name ...
- Java中的多线程你只要看这一篇就够了
如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...
最新文章
- 今年期末微积分考试试题:看看你能够在两个小时内做对几道题?
- C# 连接数据库 Sql Server
- c++用一级运算比较大小_阿里百度腾讯 C/C++ 面试题总结,我全都告诉你!
- 2020 我的C++的学习之路 第八章函数
- RHCE认证培训+考试七天实录(一)
- c#解析json字符串处理清晰易懂的方法
- Smarty目录结构和子目录路径问题
- 演练 base调用父类的方法 c# 1613713591
- ffdshow 源代码分析 9: 编解码器有关类的总结
- libxml主要函数说明 (二)
- Java实现文件复制功能
- openg-光照贴图
- 【稳定性day2】当当网的高可用之道
- 怎样做自媒体视频剪辑赚钱?
- JS判断手机浏览器,并跳转到手机端网页
- 全球及中国雾化铜和铜合金粉末行业产销需求及发展动态分析报告2022-2028年
- linux http status404,解决问题:HTTP Status 404(The requested resource is not avail
- ”高内聚 ,低耦合“到底是什么意思?
- CNN与句子分类之动态池化方法DCNN--模型介绍篇
- c语言中指数形式怎么表示_C语言编程基础知识汇总学习,适合初学者!
热门文章
- BIEE叙述图导航实例
- 微信快速开发框架(五)-- 利用快速开发框架,快速搭建微信浏览博客园首页文章...
- TurboMail邮件服务器腾云驾务云化邮件办公
- smartforms长文本处理方式
- 升级dedecms5.5后,出现提示保存目录数据时失败,请检查你的输入资料是否存在问题...
- 2020-01-14 转载【dpdk】使用libpcap-PMD驱动收发包
- avl树 php,PHP实现平衡二叉树(AVL树)
- spring4+struts2+hibernate5整合出现spring异常
- Openlayers4加载天地图
- SpringCloud系列之Nacos+Dubbo+Seata应用篇