生产者消费者问题:管程法
//生产者消费者问题:管程法
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;}
}
生产者消费者问题:管程法相关推荐
- 生产者消费者模型-管程法(Java)
生产者消费者模型-管程法(Java) package src.thread;//生产者 消费者 产品 缓冲区 public class TestPC {public static void main( ...
- 生产者消费者问题——管程法
消费者和生产者 消费者只管消费的问题 缓冲区中的十个鸡笼中有鸡就消费 十个都没有就停止消费给生产者信号让他生产,只要有产品我立马又消费 生产者只管生产的问题 如果缓冲区的十个鸡笼不是全满我就去生产 如 ...
- 【Java多线程】生产者消费者问题
使用管程法 属性定义 缓冲区的容量为10 生产者将生产100个面包 消费者将消费105个面包 思路 生产者不停地生产,生产结果放进缓冲区 消费者不停地消费,从缓冲区中取走产品 当缓冲区为10时,停止生 ...
- 生产者消费模型-管程法
并发协作模型"生产者/消费者模式"->管程法 生产者:负责生产数据的模块(可能是方法,对象,线程,进程): 消费者:负责处理数据的模块(可能是方法,对象,线程,进程): 缓冲 ...
- [19/04/11-星期四] 多线程_并发协作(生产者/消费者模式_2种解决方案(管程法和信号灯法))...
一.概念 多线程环境下,我们经常需要多个线程的并发和协作.这个时候,就需要了解一个重要的多线程并发协作模型"生产者/消费者模式". Ø 什么是生产者? 生产者指的是负责生产数据的模 ...
- 使用管程法解决生产者消费者问题
package com.test.Thread; /* 测试生产者消费者模型-->利用缓冲区解决:管程法 生产者,消费者,产品,缓冲区*/ public class TestPC {public ...
- 管程法实现生产者消费者问题
//管程法实现生产者消费者 //生产者,消费者,产品,缓冲区 public class TestPC {public static void main(String[] args) {SynConta ...
- 生产者消费者模型实现方式:管程法,信号灯法
管程法 生产者:负责生产的数据模块 消费者:负责处理数据的模块 缓冲区:消费者不能直接从生产者获取产品,生产者生产进入缓冲区 public class Demo {public static void ...
- 管程法解决生产者消费者问题
生产者-消费者模式是一个十分经典的多线程并发协作的模式,弄懂生产者-消费者问题能够让我们对并发编程的理解加深.所谓生产者-消费者问题,实际上主要是包含了两类线程,一种是生产者线程用于生产数据,另一种是 ...
最新文章
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
- 百练OJ:3865和2677:肿瘤检测
- 五大板块(2)—— 指针
- context的使用
- Google 地图 google map api / 地图有关
- mongodb 集群shard_mongodb集群构建方案(二)
- 线性表_双向循环链表(Caesar加密变换结点顺序 代码实现 )
- CPC客户端报错 error
- 麒麟V10系统密码策略修改
- 模电:集成运算放大器
- 稳压二极管和TVS管知识点总结
- 使用Excel和Tableau分析淘宝母婴产品上新策略
- 微信开方平台微信管理员重置
- 百度地图自定义大头针图片和添加标注
- 20191207-CHKDSK命令修复磁盘教程
- 微信公众号配置token
- CAD高低版本互转,版本转换知识
- 关于Debian10的网络配置
- C语言图书管理系统验证码,C语言的图书管理系统
- TSINGSEE青犀视频监控技术在城市轨道交通中的应用
热门文章
- PHP 获取当天凌晨时间戳
- matlab绘图坐标轴字体_MATLAB绘图(轴文本粗体,曲线粗体),Matlab,坐标轴,文字,加粗...
- mysql启动报错ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
- 〖Docker指南②〗Docker常用命令汇总
- mPaaS客户端基线升级踩坑先升到10.1.32再升到10.1.60(iOS)
- Word中并排放置图片的方法
- 震惊!为了家人请不要这样对待自己的身体!
- 云计算大数据基础知识点
- 矩阵知识:正交矩阵、行列式、子式与代数余子式
- 行列式的两种计算方法