package com.guigu.test14;
public class Test14 {
public static void main(String[] args) {
FoodTable f = new FoodTable();
Cook c = new Cook("厨子",f);
Waiter w = new Waiter("服务员", f);
c.start();
w.start();
}
}
class FoodTable{
private static final int MAX = 3;
private int count;
public synchronized void put(){
if(count>=MAX){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count++;
System.out.println(Thread.currentThread().getName()+"放了一盘菜,剩余:" + count);
this.notify();
}
public synchronized void take(){
if(count<=0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count--;
System.out.println(Thread.currentThread().getName()+"取走一盘菜,剩余:" + count);
this.notify();
}
}
class Cook extends Thread{
private FoodTable f;
public Cook(String name, FoodTable f) {
super(name);
this.f = f;
}
@Override
public void run() {
while(true){
f.put();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Waiter extends Thread{
private FoodTable f;
public Waiter(String name, FoodTable f) {
super(name);
this.f = f;
}
@Override
public void run() {
while(true){
f.take();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}