import java.util.ArrayList;
import java.util.List;
public class Plate {
List<Object> eggs = new ArrayList<Object>();
// 定义一个拿鸡蛋的方法,返回鸡蛋(基本数据类型)
public synchronized Object getEggs() {
if (eggs.size() == 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Object egg = eggs.get(0);// 当放入鸡蛋的时候拿到鸡蛋
eggs.clear();// 清空盘子
notify();// 唤醒等待的单个线程
System.out.println("拿到鸡蛋,你该放鸡蛋了");
return egg;
}
//定义一个放鸡蛋的方法,传入鸡蛋参数
public synchronized void putEggs(Object egg) {
if (eggs.size() >0 ) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
eggs.add(egg);// 往盘子里面放鸡蛋
notify();// 唤醒等待的单个线程
System.out.println("放入鸡蛋,你可以拿了!");
}
public static void main(String[] args) {
Plate plate = new Plate();
Thread t1 = new PutThread(plate);
Thread t2 = new GetThread(plate);
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 给放鸡蛋添加单个线程
class PutThread extends Thread {
private Plate plate;
private Object egg = new Object();
public PutThread(Plate plate) {
this.plate = plate;
}
public void run() {
for (int i = 0; i < 10; i++) {
plate.putEggs(egg);
}
}
}
// 给拿鸡蛋添加单个线程
class GetThread extends Thread {
private Plate plate;
public GetThread(Plate plate) {
this.plate = plate;
}
public void run() {
for (int j = 0; j < 10; j++) {
plate.getEggs();
}
}
}
分享到:
相关推荐
生产者与消费者的问题-----操作系统课程设计报告书.doc
1、设计目的:通过研究Linux的进程机制和信号量,实现生产者消费者问题的并发控制。 2、说明:有界缓冲区内设有20个存储单元,放入取出的产品设定为1-20个整数。 3、设计要求: 生产者和消费者进程的数目不固定,可...
通过研究进程并发和信号量机制,实现生产者-消费者问题的并发控制。 2、设计要求 1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者进程的标识符。 说明:...
生产者消费者问题,C++。生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者...
多生产者,多消费者问题源代码多生产者,多消费者问题源代码多生产者,多消费者问题源代码多生产者,多消费者问题源代码多生产者,多消费者问题源代码多生产者,多消费者问题源代码多生产者,多消费者问题源代码多...
生产者消费者问题---源码.rar
生产者消费者问题总结 信号量概念总结 经典生产者-消费者问题 较为复杂的生产者-消费者问题 华南理工大学生产者和消费者问题 个人总结
大连理工大学操作系统大作业, 进程同步与互斥 生产者与消费者问题
以记录型信号量实现生产者-消费者问题 实验目的: 1.加深对进程同步概念的理解。 2.理解多道程序环境中,不同进程对资源访问及相互合作进程的关系的处理方法。 实验要求: 利用C语言程序模拟生产者-消费者问题和哲学...
生产者消费者流程图; 生产者消费者流程图。
进程同步模拟设计--生产者和消费者问题 进程调度同步异步
生产者和消费者 ----------------------------------- 产品 核心元素 工厂 生成产品 消费产品 生产者 生成产品 消费者 消费产品 市场 操作消费者、生产者 --------------------------------- 一次性生产15个 一次性...
进程之间的互斥和同步问题,即不允许消费者进程到一个空缓冲区去取产品,不允许生产者进程向一个装满产品的缓冲区中投放产品;也不允许多个生产者或消费者同时放或取,也不允许生产者和消费者同时放和取。
在Linux操作系统下用C或C++实现经典同步问题:生产者-消费者问题。 含源代码和文档。 内容: 1.一个大小为10的缓冲区,初始状态为空。 2.2个生产者,随机等待一段时间,往缓冲区中添加数据,若缓冲区已满,等待消费...
生产者消费者模式java示例源码
生产者——消费者问题实际上是相互合作进程关系的一种抽象。该类问题不允许消费者进程到一个空缓冲区中取产品,同时也不允许生产者进程到一个已满且还没被取走的缓冲区中投放产品。 使用一个数组来表示具有n个(0,1...
利用记录型信号量解决生产者-消费者问题.doc
生产者线程和消费者线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。生产者线程生产物品时,若无空缓冲区可用,生产者线程必须等待消费...
操作系统中典型的同步问题,m个生产者,n个消费者链接在具有k个单位缓冲区的有界环形缓冲区上,生产者和消费者是并发线程,只要缓冲区未满,生产者线程就可以生产一件产品放入其中,只要缓冲区不空,消费者就可以...