/**
* 生产者和消费者
*/
public class Demo {
public static void main(String[] args) {
Cooker cooker = new Cooker();
cooker.setName("厨师:");
Foodie foodie = new Foodie();
foodie.setName("吃货:");
cooker.start();
foodie.start();
}
}
=================
/**
* 厨师
*
* @author silence
*/
public class Cooker extends Thread {
@Override
public void run() {
while (true) {
synchronized (Desk.LOCK) {
//判断汉堡包数量,如果为0 跳出
if (Desk.count == 0) {
break;
} else {
//如果汉堡包不为0 则判断生成的汉堡包是否被吃货吃掉
if (Desk.flag) {
try {
//如果有汉堡,等待(等待消费者吃掉,叫醒厨师)
Desk.LOCK.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
//如果生产的汉堡包被消费者 吃掉了,就做汉堡包,
System.out.print(getName());
System.out.println("在做汉堡包" + Desk.count);
//标记汉堡包做好了
Desk.flag = true;
//叫醒消费者
Desk.LOCK.notifyAll();
}
}
}
}
}
}
=============
public class Desk {
/**
* true 代表有汉堡包, false 代表没有汉堡包
*/
public static boolean flag = false;
/**
* 吃汉堡包的数量
*/
public static int count = 10;
/**
* 锁对象
*/
public static final Object LOCK = new Object();
}
==================
public class Foodie extends Thread {
@Override
public void run() {
while (true) {
synchronized (Desk.LOCK) {
//判断汉堡包数量,如果为0 跳出
if (Desk.count == 0) {
break;
} else {
//如果汉堡包不为0 则判断是否有汉堡包,如果有为true
if (Desk.flag) {
System.out.print(getName());
System.out.println("在吃汉堡包");
//吃掉汉堡包了,标记为false
Desk.flag = false;
//吃掉一个汉堡包,在总数减一
Desk.count--;
//叫醒厨师
Desk.LOCK.notifyAll();
} else {
try {
//如果没有汉堡包,消费者等待。厨师做好了,会叫醒
Desk.LOCK.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
}