//生产者消费者问题:管程法
public class TestPC {public static void main(String[] args) {SynContainer container=new SynContainer();new Productor(container).start();new Customs(container).start();}
}//生产者
class Productor extends Thread{SynContainer container;public Productor(SynContainer container) {this.container = container;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("生产了"+i+"只鸡");try {container.push(new Chicken(i));} catch (InterruptedException e) {e.printStackTrace();}}}
}//消费者
class Customs extends Thread{SynContainer container;public Customs(SynContainer container) {this.container = container;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {try {System.out.println("消费了"+container.pop().id+"只鸡");} catch (InterruptedException e) {e.printStackTrace();}}}
}//产品
class Chicken{int id;//产品编号public Chicken(int id) {this.id = id;}
}//缓冲区
class SynContainer{//需要一个容器大小Chicken[] chickens=new Chicken[10];int count=0;//生产者放入产品public synchronized  void push(Chicken chicken) throws InterruptedException {//如果容器满了,就需要等待消费者消费if(count==chickens.length){//通知消费者消费,等待生产this.wait();}//如果容器没有满,就需要丢入产品chickens[count]=chicken;count++;//可以通知消费者消费了this.notifyAll();}public synchronized Chicken pop() throws InterruptedException {//判断能否消费if(count==0){//等待生产者生产,消费者等待this.wait();}//如果可以消费count--;Chicken chicken=chickens[count];//吃完了,通知生产者生产this.notifyAll();return chicken;}
}

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

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

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

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

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

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

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

  4. 生产者消费模型-管程法

    并发协作模型"生产者/消费者模式"->管程法 生产者:负责生产数据的模块(可能是方法,对象,线程,进程): 消费者:负责处理数据的模块(可能是方法,对象,线程,进程): 缓冲 ...

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

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

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

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

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

    //管程法实现生产者消费者 //生产者,消费者,产品,缓冲区 public class TestPC {public static void main(String[] args) {SynConta ...

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

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

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

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

最新文章

  1. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
  2. 百练OJ:3865和2677:肿瘤检测
  3. 五大板块(2)—— 指针
  4. context的使用
  5. Google 地图 google map api / 地图有关
  6. mongodb 集群shard_mongodb集群构建方案(二)
  7. 线性表_双向循环链表(Caesar加密变换结点顺序 代码实现 )
  8. CPC客户端报错 error
  9. 麒麟V10系统密码策略修改
  10. 模电:集成运算放大器
  11. 稳压二极管和TVS管知识点总结
  12. 使用Excel和Tableau分析淘宝母婴产品上新策略
  13. 微信开方平台微信管理员重置
  14. 百度地图自定义大头针图片和添加标注
  15. 20191207-CHKDSK命令修复磁盘教程
  16. 微信公众号配置token
  17. CAD高低版本互转,版本转换知识
  18. 关于Debian10的网络配置
  19. C语言图书管理系统验证码,C语言的图书管理系统
  20. TSINGSEE青犀视频监控技术在城市轨道交通中的应用

热门文章

  1. PHP 获取当天凌晨时间戳
  2. matlab绘图坐标轴字体_MATLAB绘图(轴文本粗体,曲线粗体),Matlab,坐标轴,文字,加粗...
  3. mysql启动报错ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
  4. 〖Docker指南②〗Docker常用命令汇总
  5. mPaaS客户端基线升级踩坑先升到10.1.32再升到10.1.60(iOS)
  6. Word中并排放置图片的方法
  7. 震惊!为了家人请不要这样对待自己的身体!
  8. 云计算大数据基础知识点
  9. 矩阵知识:正交矩阵、行列式、子式与代数余子式
  10. 行列式的两种计算方法