管程法实现生产者消费者问题
//管程法实现生产者消费者
//生产者,消费者,产品,缓冲区
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;}}
管程法实现生产者消费者问题相关推荐
- 使用管程法解决生产者消费者问题
package com.test.Thread; /* 测试生产者消费者模型-->利用缓冲区解决:管程法 生产者,消费者,产品,缓冲区*/ public class TestPC {public ...
- 管程法解决生产者消费者问题
生产者-消费者模式是一个十分经典的多线程并发协作的模式,弄懂生产者-消费者问题能够让我们对并发编程的理解加深.所谓生产者-消费者问题,实际上主要是包含了两类线程,一种是生产者线程用于生产数据,另一种是 ...
- 多线程管程法(生产者消费者问题)
管程法是用于解决线程之间通信与线程不安全的一种解决办法,典型的生产者与消费者问题可以通过管程法进行解决,特点是建立一个消费者和生产者发生通信的缓冲区,进而实现解决线程通信. 实现: 生产者和消费者共享 ...
- [19/04/11-星期四] 多线程_并发协作(生产者/消费者模式_2种解决方案(管程法和信号灯法))...
一.概念 多线程环境下,我们经常需要多个线程的并发和协作.这个时候,就需要了解一个重要的多线程并发协作模型"生产者/消费者模式". Ø 什么是生产者? 生产者指的是负责生产数据的模 ...
- 生产者消费者模型-管程法(Java)
生产者消费者模型-管程法(Java) package src.thread;//生产者 消费者 产品 缓冲区 public class TestPC {public static void main( ...
- 生产者消费者模型实现方式:管程法,信号灯法
管程法 生产者:负责生产的数据模块 消费者:负责处理数据的模块 缓冲区:消费者不能直接从生产者获取产品,生产者生产进入缓冲区 public class Demo {public static void ...
- 生产者消费者问题:管程法
//生产者消费者问题:管程法 public class TestPC {public static void main(String[] args) {SynContainer container=n ...
- 生产者消费者问题——管程法
消费者和生产者 消费者只管消费的问题 缓冲区中的十个鸡笼中有鸡就消费 十个都没有就停止消费给生产者信号让他生产,只要有产品我立马又消费 生产者只管生产的问题 如果缓冲区的十个鸡笼不是全满我就去生产 如 ...
- 【Java多线程】生产者消费者问题
使用管程法 属性定义 缓冲区的容量为10 生产者将生产100个面包 消费者将消费105个面包 思路 生产者不停地生产,生产结果放进缓冲区 消费者不停地消费,从缓冲区中取走产品 当缓冲区为10时,停止生 ...
最新文章
- Google正式将网速列为网站排名因素
- AutoBench的使用分析
- java for循环和数组--冒泡排序、二分查找法
- 中国蚁剑(win32-x64)——安装报错:解压代码出错:[object Object]
- configure脚本分析
- 1小时内注册公司 政务中心104个窗口同厅办公
- report CRM_CREATE_REQUEST_FOR_MAT
- 【dfs】【拓扑排序】组合树
- x210 debug口当普通串口使用
- 从零开始学Go之并发(四):互斥
- uniapp 乘法结果保留了很多小数_苏教版五年级数学上册5.9循环小数和商的近似值微课视频 | 练习...
- 【BZOJ4205】卡牌配对
- 二进制包20分钟快速安装部署 Kubernetes v1.14.0 集群
- 玩游戏用云电脑选高配有延迟吗
- UDS诊断系列之七 安全访问(27)服务
- 如何用服务器做虚拟主机,服务器如何搭建虚拟主机
- PHP求两个数据的交集,php计算两数组交集两个函数_PHP教程
- 瑞幸咖啡,不过是又一个“逃离美团者”
- python3数据分析面试题--找出出现次数最多的名字并统计次数
- ios xmpp研究探索:删除好友
热门文章
- 如何用爬虫工具实现竞对价格监控
- 视觉工程师必须知道选型知识与计算方法
- 又是一年WWDC,暨回顾去年之旅——Part II
- java double 占位符_Java输出格式化之占位符
- 8月报考季,软考科目选哪个?
- php++内购续期订阅,appstore:内购项目之自动续期订阅
- JS中的函数概念和C语言的概念是类似的,c语言和JavaScript的区别有哪些?
- HDFS 的深入了解,深入浅出,面试必备(Hadoop的三部曲——上)
- 东方国信(实习一面)
- BUUCTF msic 专题(120)[QCTF2018]X-man-A face