使用管程法解决生产者消费者问题
package com.test.Thread;
/*
测试生产者消费者模型-->利用缓冲区解决:管程法
生产者,消费者,产品,缓冲区*/
public class TestPC {public static void main(String[] args) {SysContainer container =new SysContainer();new Productor(container).start();new Consumer(container).start();}}
//生产者类
class Productor extends Thread{SysContainer container;public Productor(SysContainer container) {this.container = container;}//生产鸡!@Overridepublic void run(){for (int i = 0; i < 100; i++) {System.out.println("生产了"+i+"只鸡");container.push(new Chicken(i));}}
}
//消费者类
class Consumer extends Thread{SysContainer container;public Consumer(SysContainer container) {this.container = container;}//消费者消费@Overridepublic void run() {//消费for (int i = 0; i < 100; i++) {System.out.println("消费了-->"+container.pop().id+"只鸡");}}
}
//产品类
class Chicken{int id;//生产编号public Chicken(int id){this.id=id;}}
class SysContainer{//设定容器大小Chicken[] chickens=new Chicken[9];//容器计数器int count=0;//消费者负责生产鸡public synchronized void push(Chicken chicken){//如果生产的鸡到达了容器大小,停止生产等待消费者消费if(count==chickens.length){//生产者等待try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//容器没有满,就放入产品chickens[count]=chicken;count++;//通知消费者消费this.notifyAll();}//消费者消费public synchronized Chicken pop(){//判断是否有鸡if(count==0){try {//没有鸡等待this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//有鸡就可以消费count--;Chicken chicken =chickens[count];//唤醒生产者生产this.notifyAll();return chicken;}}
使用管程法解决生产者消费者问题相关推荐
- 管程法解决生产者消费者问题
生产者-消费者模式是一个十分经典的多线程并发协作的模式,弄懂生产者-消费者问题能够让我们对并发编程的理解加深.所谓生产者-消费者问题,实际上主要是包含了两类线程,一种是生产者线程用于生产数据,另一种是 ...
- 操作系统课设--使用信号量解决生产者/消费者同步问题
山东大学操作系统课设lab3 实验三 使用信号量解决生产者/消费者同步问题(lab3) 实验目的 理解Nachos的信号量是如何实现的 生产者/消费者问题是如何用信号量实现的 在Nachos中是如何创 ...
- Linux多线程实践(六)使用Posix条件变量解决生产者消费者问题
前面的一片文章我们已经讲过使用信号量解决生产者消费者问题.那么什么情况下我们须要引入条件变量呢? 这里借用 http://www.cnblogs.com/ngnetboy/p/3521547.htm ...
- 两种方式解决 生产者消费者问题
一.通过wait().notify()线程通信来实现 输出结果: 二.通过阻塞队列来解决生产者消费者问题 输出结果: 由输出结果可以看出:"最后阻塞队列中还剩下4个鸡蛋"明显是正确 ...
- JAVA解决生产消费者_Java常用三种方式解决生产者消费者问题(详细)
package test; /** * Synchronized 版本解决生产者消费者 * wait() / notify()方法 */ import java.util.LinkedList; im ...
- 用 wait-notify 写一段代码来解决生产者-消费者问题
用 wait-notify 写一段代码来解决生产者-消费者问题 参考文章: (1)用 wait-notify 写一段代码来解决生产者-消费者问题 (2)https://www.cnblogs.com/ ...
- 管程法实现生产者消费者问题
//管程法实现生产者消费者 //生产者,消费者,产品,缓冲区 public class TestPC {public static void main(String[] args) {SynConta ...
- java信号量生产者_java信号量PV操作 解决生产者-消费者问题
package test1; /** * 该例子演示生产者和消费者的问题(设只有一个缓存空间.一个消费者和一个生产者) * MySystem类定义了缓冲区个数以及信号量 * @author HYY * ...
- 使用信号量机制解决生产者消费者问题
生产者消费者问题是经典的同步问题,这篇文章用来记录一下如何使用信号量机制解决. 信号量机制(Semaphore)是解决同步问题常用解法,所谓信号量其实就代表着对应共享资源的数量.对于信号量只允许三种操 ...
最新文章
- 软件测试培训分享:软件测试岗位面试技巧有哪些?
- 哈佛大学惊人发现:新冠对人类未来影响巨大!
- 增强.net开发的5个非常有用的Visual Studio 2012扩展
- sed 格式化输出df -h
- Win64 驱动内核编程-26.强制结束进程
- 第一章:线性空间和线性变换
- 昇腾万里·让AI无所不及!DevRun开发者沙龙在武汉成功举办
- 平台的本质——保险公司互联网平台建设系列
- 【c++leetcode】判断一个数是否是2的幂、3的幂、4的幂
- [深度学习从入门到女装]PReLU
- 前端笔记05 - js
- 英皇考级——听力测试的训练方法
- MyBatis--对象的联合查询
- 原型和原型链和instanceof
- 【机器学习】代价函数,损失函数,目标函数区别
- 弱校胡策 大逃亡(BFS灌水+二分答案)
- Generator 快速理解
- 解决安装程序无法初始化。请下载Adobe
- qt 3d迷宫游戏_玩迷宫也能解锁孩子空间思维,各年龄必备迷宫书单推荐(附游戏资源下载)...
- Linux 单独编译驱动模块(ko文件)
热门文章
- imagenet/ILSVRC2012数据集百度云及其具体分类
- 宇视200W 相机一天所占存储空间是多少
- Canvas+Socket搞出一个多人游玩的“我画你猜”
- 梅科尔工作室-孙溢博-鸿蒙笔记1
- ncbi爬虫geneID注释
- 测试工程师常见面试题
- python压缩pdf_【转】PDF 用python 压缩
- 打造品牌元宇宙 子虔科技Zetaverse产业元宇宙平台现已上线
- 编程之法-C语言应用开发与工程实践-C语言概述
- [小白向]Python使用request库调用API并获取返回的JSON数据包中的内容