课程设计——利用信号量实现生产者-消费者问题(java)
package cn.Douzi.ProductConsume; import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner; public class ProCon { static int LEN = 3;
static public int PROTIME = 1500;
static public int CONTIME = 1000; static public int totalData = 1000;
static public Queue<Data> buffer = new LinkedList<>();
static public Buffer empty = new Buffer(0, 10);
static public Mutex mutex = new Mutex(1); public ProCon() {
} public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("|-----------------------------------------------------------|");
System.out.println("| |");
System.out.println("| Welcome to My System ! |");
System.out.println("| ↖ By Douzi 2017 ↗ |");
System.out.println("| 生产消费开始进行 |");
System.out.println("| |");
System.out.println("|-----------------------------------------------------------|\n"); Scanner scaner = new Scanner(System.in);
System.out.println("设置缓冲区大小: ");
LEN = scaner.nextInt();
System.out.println("缓冲区大小: " + LEN + "\n"); System.out.println("设置生产休眠时间: ");
ProCon.PROTIME = scaner.nextInt();
System.out.println("设置消费休眠时间: ");
ProCon.CONTIME = scaner.nextInt(); ProductWindows pro = new ProductWindows();
ConsumeWindows con = new ConsumeWindows(); Thread t1 = new Thread(pro);
Thread t2 = new Thread(con);
t1.start(); t2.start();
} } class ProductWindows implements Runnable { public ProductWindows() {
} @Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(ProCon.PROTIME);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ProCon.totalData++;
System.out.println("生产数据:" + ProCon.totalData);
if (ProCon.buffer.size() < ProCon.LEN) {
synchronized (ProCon.mutex) {
ProCon.buffer.add(new Data(ProCon.totalData));
System.out.println("将数据: " + ProCon.totalData + " 放入缓冲区");
System.out.println("此时缓冲区大小: " + ProCon.buffer.size() + "\n");
}
} else {
System.out.println("缓冲区满,等待数据取出缓冲区.....................\n");
ConsumeWindows con = new ConsumeWindows();
Thread t2 = new Thread(con);
t2.start();
break;
}
}
} } class ConsumeWindows implements Runnable { @Override
public void run() {
// TODO Auto-generated method stub
// System.out.println("Test"); while (true) {
Data d = new Data(0);
try {
Thread.sleep(ProCon.CONTIME);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (ProCon.buffer.size() > 0) {
synchronized (ProCon.mutex) {
d = ProCon.buffer.peek(); ProCon.buffer.poll();
System.out.println("从缓冲区取出数据: " + d.getData());
}
} else {
System.out.println("缓冲区空,等待数据放入缓冲区..................\n");
ProductWindows pro = new ProductWindows();
Thread t1 = new Thread(pro);
t1.start();
break;
}
System.out.println("消费数据: " + d.getData() + "\n");
} } } class Data {
private int data; public Data(int data) {
super();
this.data = data;
} public int getData() {
return data;
}
} class Mutex {
private int mutex; public Mutex(int mutex) {
super();
this.mutex = mutex;
} } class Buffer {
private int full;
private int empty;
public Buffer(int full, int empty) {
super();
this.full = full;
this.empty = empty;
}
}
课程设计——利用信号量实现生产者-消费者问题(java)的更多相关文章
- 课程设计——利用信号量实现哲学家进餐问题(JAVA)
package cn.Douzi.PhiEat; /** * 表示筷子的类 */ public class Chopstick{ /** * 表示筷子是否可用 */ private volatile ...
- 课程设计——利用信号量实现读-写者问题(JAVA)
package cn.Douzi.ReadWriter; import java.util.Scanner; public class ReadWrite { static public int co ...
- Java多线程15:Queue、BlockingQueue以及利用BlockingQueue实现生产者/消费者模型
Queue是什么 队列,是一种数据结构.除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的.无论使用哪种排序方式,队列的头都是调用remove()或poll()移 ...
- 【Windows】用信号量实现生产者-消费者模型
线程并发的生产者-消费者模型: 1.两个进程对同一个内存资源进行操作,一个是生产者,一个是消费者. 2.生产者往共享内存资源填充数据,如果区域满,则等待消费者消费数据. 3.消费者从共享内存资源取数据 ...
- day34 python学习 守护进程,线程,互斥锁,信号量,生产者消费者模型,
六 守护线程 无论是进程还是线程,都遵循:守护xxx会等待主xxx运行完毕后被销毁 需要强调的是:运行完毕并非终止运行 #1.对主进程来说,运行完毕指的是主进程代码运行完毕 #2.对主线程来说,运行完 ...
- 生产者消费者模型Java实现
生产者消费者模型 生产者消费者模型可以描述为: ①生产者持续生产,直到仓库放满产品,则停止生产进入等待状态:仓库不满后继续生产: ②消费者持续消费,直到仓库空,则停止消费进入等待状态:仓库不空后,继续 ...
- 生产者消费者模式-Java实现
感知阶段 随着软件业的发展,互联网用户的日渐增多,并发这门艺术的兴起似乎是那么合情合理.每日PV十多亿的淘宝,处理并发的手段可谓是业界一流.用户访问淘宝首页的平均等待时间只有区区几秒,但是服务器所处理 ...
- 生产者消费者模型java
马士兵老师的生产者消费者模型,我感觉理解了生产者消费者模型,基本懂了一半多线程. public class ProducerConsumer { public static void main(Str ...
- 生产者消费者问题Java三种实现
生产者-消费者Java实现 2017-07-27 1 概述 生产者消费者问题是多线程的一个经典问题,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品. 解决生产者/ ...
随机推荐
- TDGA-需求分析
李青:绝对的技术控,团队中扮演“猪”的角色,勤干肯干,是整个团队的主心骨,课上紧跟老师的步伐,下课谨遵老师的指令,课堂效率高,他的编程格言“没有编不出来的程序,只有解决不了的bug”. 胡金辉:半两油 ...
- OpenCV学习笔记——图像平滑处理
1.blur 归一化滤波器Blurs an image using the normalized box filter.C++: void blur(InputArray src, OutputArr ...
- 软工 · 第十一次作业 - Alpha 事后诸葛亮(团队)
软工 · 第十一次作业 - Alpha 事后诸葛亮(团队) 组长本次作业链接 现代软件工程 项目Postmortem 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场 ...
- HDU 5428 The Factor 分解因式
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5428 The Factor Accepts: 101 Submissions: 811 Tim ...
- webService —— soap
package soupTest; import javax.jws.WebMethod; import javax.jws.WebService; import javax.xml.ws.Endpo ...
- C#高级编程 (第六版) 学习 第一章:.Net体系结构
第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...
- 3dContactPointAnnotationTool开发日志(二九)
今天想着在Windows平台上跑通那个代码,不过它的官网上写的支持平台不包括windows,但我还是想试试,因为看他的依赖好像和平台的关系不是特别大. 看了下它的py代码,不知道是py2还是p ...
- 软工实践团队展示——WorldElite
软工实践团队展示--WorldElite 本次作业链接 团队成员 031602636许舒玲(组长) 031602237吴杰婷 031602634吴志鸿 081600107傅滨 031602220雷博浩 ...
- 爬虫学习之-python插入mysql报错
异常:'latin-1' codec can't encode characters in position 62-66: ordinal not in range(256) 用Python通过pym ...
- jQuery+PHP+Mysql在线拍照和在线浏览照片
本文用示例讲述了如何使用jQuery与PHP及Mysql结合,实现WEB版在线拍照.上传.显示浏览的功能,ajax交互技术贯穿本文始末,所以本文的读者要求具备相当熟悉jQuery及其插件使用和javs ...