生产者、消费者问题

生产者讲产品交给电源,而消费者从店员出去走产品,店员一次只能持有固定数量的产品,

如果生产者生产了过多的产品,店员会叫生产者等一下,如果店中有空位放产品了在通知生产者继续生产;如果店中没有了产品,店员会告诉消费者等一下,如果店中有产品了再通知消费者取走产品。

问题:生产者比消费者快是,消费者会漏掉一些数据没有取到

消费者比生产者快时,消费者会取相同的数据

//生产者线程要执行的任务
public class Producer implements Runnable {private Clerk cl;public Producer(Clerk cl){this.cl=cl;}public void run() {System.out.println("生产者开始生产产品!");while(true){try {Thread.sleep((int)(Math.random()*10)*100);} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}cl.addProduct();//生产产品}}}
//消费者线程要执行的任务
public class Consumer implements Runnable {private Clerk cl;public Consumer(Clerk cl) {this.cl=cl;}public void run() {System.out.println("消费者开始取走产品!");while(true){try {Thread.sleep((int)(Math.random()*10)*100);} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}cl.getProduct();//取走产品}}}
public class Clerk {private int product=0;//产品默认0;//生产者生成出来的产品交给店员public synchronized void addProduct(){if(this.product>=20){try {wait();//产品已满,请稍等在生产} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}else{product++;System.out.println("生产者生产地"+product+"个产品。");notifyAll(); //通知等待区的消费者今天取产品了}}//消费者从店员处取产品public synchronized void getProduct(){if(this.product<=0){try {wait();//产品没有货了,请稍等再取} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}else{System.out.println("消费者取走了第"+product+"个产品");product--;notifyAll();//通知等待区的生成者可以生产 产品}}
}
public static void main(String[] args) {// TODO 自动生成的方法存根Clerk cl=new Clerk();Thread prt=new Thread(new Producer(cl));//生产者线程Thread cot=new Thread(new Consumer(cl));//消费者线程prt.start();cot.start();}

转载于:https://blog.51cto.com/12168943/1875302

多线程生产者,消费者例题相关推荐

  1. python多线程实现生产者消费者_用Python实现多线程“生产者-消费者”模型的简单例子...

    用 Python 实现多线程"生产者 - 消费者"模型的简单例子 生产者消费者问题是一个著名的线程同步问题, 该问题描述如下: 有一个生产者在生产产品, 这些产品将提供给若干个消费 ...

  2. linux多线程 消费者,linux c 多线程 生产者-消费者二

    linux c 多线程 生产者--消费者2 实在不好意思,第一个版本有些问题,是局部变量和堆里面变量的区别.今天做了一下修改.代码如下. #ifndef _LIST_H_ #define _LIST_ ...

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

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

  4. 多线程-线程通信:生产者消费者例题

    /*** 线程通信的应用:经典例题:生产者/消费者问题** 生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品,* 店员一次只能持有固定数量的产品( ...

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

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

  6. 多线程生产者消费者模型

    1. 基础知识: 1. 什么是生产者-消费者模式: 比如有两个进程A和B,它们共享一个固定大小的缓冲区,A进程产生数据放入缓冲区,B进程从缓冲区中取出数据进行计算,那么这里其实就是一个生产者和消费者的 ...

  7. Linux多线程——生产者消费者模型

    目录 一.生产者消费者模型 1.1 什么是生成者消费者模型 1.2 生产者消费者模型的优点 1.3 基于阻塞队列实现生产者消费者模型 1.4 POSIX信号量 1.4.1 信号量概念 1.4.2 P操 ...

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

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

  9. 多线程-生产者-消费者模型

    一.前言 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例.该问题描 ...

  10. Linux基于单链表环形队列的多线程生产者消费者模型

    生产者–消费者模型简述 对于生产者–消费者模型,相信我们都不陌生,因为生活中,我们无时无刻不在扮演生产者或消费者.但是对于Linux中的生产者–消费者模型,大家又了解了一个什么程度? 其实,说白了就是 ...

最新文章

  1. 经典角点检测算法实现
  2. HDU 2072 单词数
  3. android游戏开发学习笔记三(学习书籍 Android游戏编程之从零开始)
  4. Nginx正向代理实现
  5. Jenkins Job Buidler
  6. centOS下安装jdk1.8
  7. 微信红包系统架构的设计和优化分享
  8. Collection中Set集合在应用中常见的方法和注意点
  9. 预处理指令 #pragma 的使用
  10. Arduino笔记-9110风扇模块的使用
  11. 【C++】函数的形参
  12. Linux仿真运算集群,fluent DPM Linux计算集群运行报错 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  13. 分布式与系统架构的演变
  14. (五)将YOLOv5 PyTorch模型权重转换为TensorFlow Lite格式
  15. 今晚鼓捣的audio.js一些小经验
  16. (转)mysql 无法设置外键的原因总结
  17. open cv+C++错误及经验总结(五)
  18. 安川机器人焊枪切换设定方法_安川机器人工具、用户、安全模式设定方法
  19. Centos8使用yum报错 Couldn‘t resolve host name for http://mirrorlist.centos.org/?releas
  20. 知码开门 装箱问题

热门文章

  1. UPDATE INNER JOIN 两表联合更新
  2. 固定dll的加载基址的方法
  3. 【转】C#中的Stream
  4. 【转】Git连接oschina管理代码版本
  5. 利用CSS3的transform做的动态时钟
  6. 在建立与服务器的连接时出错。provider: TCP 提供程序, error: 0 - 由于目标机器积极拒绝,无法连接。)...
  7. [处理数据的心得][1]--相关矩阵的可视化
  8. MVC如何分离Controller与View在不同的项目
  9. 【只推荐一位】他自学成才,坐拥38w粉丝,技术第一大号!
  10. 数据分析五板斧与里面的屠龙刀(上)