public class testProducerConsumer {
public static void main(String[] args) {
ProductContainer pc = new ProductContainer();
Producter producter = new Producter(pc);
Consumer consumer = new Consumer(pc);
new Thread(producter).start();
new Thread(consumer).start();
}
}
class Product {
private int ID;
Product(int ID) {
this.ID = ID;
}
public String toString() {
return "Product:" + ID;
}
}
class ProductContainer {
int index = 0;
Product[] product = new Product[10];
public synchronized void push(Product pro) {
while (index == product.length) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notifyAll();
product[index] = pro;
index++;
}
public synchronized Product pop() {
while(index == 0) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notifyAll();
index--;
return product[index];
}
}
class Producter implements Runnable {
ProductContainer pc = null;
Producter(ProductContainer pc) {
this.pc = pc;
}
public void run() {
for (int i = 0; i < 50; i++) {
Product p = new Product(i);
pc.push(p);
System.out.println("生产了:" + p);
try {
Thread.sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable {
ProductContainer pc = null;
Consumer(ProductContainer pc) {
this.pc = pc;
}
public void run() {
for (int i = 0; i < 50; i++) {
Product pro = pc.pop();
System.out.println("消费了:" + pro);
try {
Thread.sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
生产者消费者问题其主要实现就是模拟进程之间的同步与互斥。 读者写者问题是在生产者消费者问题的基础上改进而来,其不同点仅在于加入一个计数变量count来记录处于读写空间中读者的数量,实现读者可同时读文件。 ...
操作系统课程设计使用java实现生产者消费者算法
操作系统,生产者消费者问题和先来先服务算法,java语言编写。
主要介绍了JAVA多线程实现生产者消费者的实例详解的相关资料,需要的朋友可以参考下
本次课程设计选到的题目为生产者消费者算法模拟,通过需求分析和资料搜寻,掌握到生产者/消费者的模式原理和优点,同时也了解到了几种可以实现生产者消费者的方式,如信号量方式,管程方式,阻塞队列方式等。
利用Java多线程实现的操作系统的生产者与消费者算法,主要用到了线程的同步,等待与唤醒操作。
本程序模拟实现了“生产者-消费者”问题的解决过程,用图形界面动态演示了P、V操作过程以及生产者、消费者进程之间的工作流程。 本程序使用的算法是典型的P、V操作使用信号量解决“生产者-消费者”问题。 本程序在...
广工操作系统实现报告汇总-(银行家算法、动态内存分配、生产者消费者、进程调度)Java实现
操作系统生产者与消费者java源代码,使用Java图形用户界面实现。
而本程序正是基于这种思想设计出来的,用来模拟生产者消费者问题的解决过程。 本程序在运行时提供友好的交互界面,且操作简单,在模拟过程中各种情况有相应文字提示,并伴有相应的图像变化,如:当没有产品可消费的...
利用记录型信号量解决生产者-消费者问题.doc
主要介绍了Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解,具有一定参考价值,需要的朋友可以了解下。
操作系统学习:用Java模拟了操作系统的轮转时间片调度算法,同时结合生产者消费者互斥模式。
A、本课程设计要求学生在阅读Linux操作系统源代码的基础上完成如下三个主要Project(包括A、B、C三类...1、用C语言模仿“生产者—消费者问题。 2、用C语言模仿实现“吃水果”问题 C、方向命题必作题目; D、自主命题。
生产者模拟多个进程生产指令放入指令队列中,消费者模拟处理机从指令队列中取出指令并映射为页进行处理,实现页面置换算法。利用Qt产生动画,模拟演示这一过程更加生动形象,可以用于操作系统的教学 软件开发设计:...
操作系统期末考试用的,里面有银行家算法,和其他的一些算法,比如先来先服务之类的。
这个压缩包包含了进程调度,管程及信号量实现读者-写者问题,生产者-消费者问题 等 用JAVA实现的可视化小程序
经典的问题(哲学家就餐问题,生产者消费者问题,读者写着问题算法及其描述),非常完整
producer_consumer.java 演示生产者-消费者线程 consumer.java 消费者线程 producer.java 生产者线程 common.java 公有类 第9章 示例描述:本章学习运行时类型识别。 Candy.java 一个用来测试的简单类 ...