//管程法实现生产者消费者
//生产者,消费者,产品,缓冲区
public class TestPC {public static void main(String[] args) {SynContainer synContainer = new SynContainer();Productor productor = new Productor(synContainer);Consumer consumer = new Consumer(synContainer);productor.setPriority(10);consumer.setPriority(1);productor.start();consumer.start();}
}//生产者
class Productor extends Thread {SynContainer synContainer;Productor(SynContainer synContainer){this.synContainer=synContainer;}@Overridepublic void run() {for (int i = 1; i <= 20; i++) {synContainer.push(new Goods(i));System.out.println("生产了第"+i+"鸡");}}
}//消费者
class Consumer extends Thread {SynContainer synContainer;Consumer(SynContainer synContainer){this.synContainer=synContainer;}@Overridepublic void run() {for (int i = 0; i < 20; i++) {System.out.println("消费了第"+synContainer.pop().id+"鸡");}}
}//产品
class Goods {int id;public Goods(int id) {this.id = id;}public Goods() {}
}//缓冲区
class SynContainer {//需要一个容器大小Goods[] goods = new Goods[5];//容器大小计数器int size = 0;//生产者将商品放入public synchronized void push(Goods good) {//如果满了,就需要消费者等待if (size == goods.length) {//通知消费者消费,生产等待try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}goods[size++] = good;//可以通知消费者this.notify();}//消费者消费chan产品public synchronized Goods pop() {if (size == 0){try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}size--;Goods good=goods[size];this.notify();return good;}}

管程法实现生产者消费者问题相关推荐

  1. 使用管程法解决生产者消费者问题

    package com.test.Thread; /* 测试生产者消费者模型-->利用缓冲区解决:管程法 生产者,消费者,产品,缓冲区*/ public class TestPC {public ...

  2. 管程法解决生产者消费者问题

    生产者-消费者模式是一个十分经典的多线程并发协作的模式,弄懂生产者-消费者问题能够让我们对并发编程的理解加深.所谓生产者-消费者问题,实际上主要是包含了两类线程,一种是生产者线程用于生产数据,另一种是 ...

  3. 多线程管程法(生产者消费者问题)

    管程法是用于解决线程之间通信与线程不安全的一种解决办法,典型的生产者与消费者问题可以通过管程法进行解决,特点是建立一个消费者和生产者发生通信的缓冲区,进而实现解决线程通信. 实现: 生产者和消费者共享 ...

  4. [19/04/11-星期四] 多线程_并发协作(生产者/消费者模式_2种解决方案(管程法和信号灯法))...

    一.概念 多线程环境下,我们经常需要多个线程的并发和协作.这个时候,就需要了解一个重要的多线程并发协作模型"生产者/消费者模式". Ø 什么是生产者? 生产者指的是负责生产数据的模 ...

  5. 生产者消费者模型-管程法(Java)

    生产者消费者模型-管程法(Java) package src.thread;//生产者 消费者 产品 缓冲区 public class TestPC {public static void main( ...

  6. 生产者消费者模型实现方式:管程法,信号灯法

    管程法 生产者:负责生产的数据模块 消费者:负责处理数据的模块 缓冲区:消费者不能直接从生产者获取产品,生产者生产进入缓冲区 public class Demo {public static void ...

  7. 生产者消费者问题:管程法

    //生产者消费者问题:管程法 public class TestPC {public static void main(String[] args) {SynContainer container=n ...

  8. 生产者消费者问题——管程法

    消费者和生产者 消费者只管消费的问题 缓冲区中的十个鸡笼中有鸡就消费 十个都没有就停止消费给生产者信号让他生产,只要有产品我立马又消费 生产者只管生产的问题 如果缓冲区的十个鸡笼不是全满我就去生产 如 ...

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

    使用管程法 属性定义 缓冲区的容量为10 生产者将生产100个面包 消费者将消费105个面包 思路 生产者不停地生产,生产结果放进缓冲区 消费者不停地消费,从缓冲区中取走产品 当缓冲区为10时,停止生 ...

最新文章

  1. Google正式将网速列为网站排名因素
  2. AutoBench的使用分析
  3. java for循环和数组--冒泡排序、二分查找法
  4. 中国蚁剑(win32-x64)——安装报错:解压代码出错:[object Object]
  5. configure脚本分析
  6. 1小时内注册公司 政务中心104个窗口同厅办公
  7. report CRM_CREATE_REQUEST_FOR_MAT
  8. 【dfs】【拓扑排序】组合树
  9. x210 debug口当普通串口使用
  10. 从零开始学Go之并发(四):互斥
  11. uniapp 乘法结果保留了很多小数_苏教版五年级数学上册5.9循环小数和商的近似值微课视频 | 练习...
  12. 【BZOJ4205】卡牌配对
  13. 二进制包20分钟快速安装部署 Kubernetes v1.14.0 集群
  14. 玩游戏用云电脑选高配有延迟吗
  15. UDS诊断系列之七 安全访问(27)服务
  16. 如何用服务器做虚拟主机,服务器如何搭建虚拟主机
  17. PHP求两个数据的交集,php计算两数组交集两个函数_PHP教程
  18. 瑞幸咖啡,不过是又一个“逃离美团者”
  19. python3数据分析面试题--找出出现次数最多的名字并统计次数
  20. ios xmpp研究探索:删除好友

热门文章

  1. 如何用爬虫工具实现竞对价格监控
  2. 视觉工程师必须知道选型知识与计算方法
  3. 又是一年WWDC,暨回顾去年之旅——Part II
  4. java double 占位符_Java输出格式化之占位符
  5. 8月报考季,软考科目选哪个?
  6. php++内购续期订阅,appstore:内购项目之自动续期订阅
  7. JS中的函数概念和C语言的概念是类似的,c语言和JavaScript的区别有哪些?
  8. HDFS 的深入了解,深入浅出,面试必备(Hadoop的三部曲——上)
  9. 东方国信(实习一面)
  10. BUUCTF msic 专题(120)[QCTF2018]X-man-A face