生产者消费者问题---拿鸡蛋
2012-02-23 09:17
106 查看
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();
}
}
}
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();
}
}
}
相关文章推荐
- 生产者消费者问题---拿鸡蛋
- 香油煎鸡蛋
- 两个鸡蛋--一道Google面试题
- 给高考作文扔个臭鸡蛋~!
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 被八个鸡蛋打败的爱情
- 数学之美(系列十六 (下)) 之 不要把所有的鸡蛋放在一个篮子里 最大熵模型
- 春分(秋分)可以竖起生鸡蛋
- 咖啡、鸡蛋、胡萝卜的故事
- 生产者消费者问题——Java方案
- 面对逆境:你是胡萝卜、鸡蛋还是咖啡豆
- 开放平台 把别人的鸡蛋放在自己的篮子里
- 先有鸡还是先有鸡蛋?C语言发展史给出的答案
- " 一个鸡蛋”改变TA的世界——让贫困地区的孩子每天都能吃上一个鸡蛋
- sqlserver2008远程登录【鸡蛋】
- SQL Server 存储过程【鸡蛋】
- 摔鸡蛋问题与跳表
- 全国软件---------欧拉与鸡蛋
- 猫与鸡蛋
- 扔鸡蛋问题详解(Egg Dropping Puzzle)