需求:
有一个厨师在做面条,有一个客人等着吃面条,厨师每次做一碗,客人每次吃一碗,客人一共可以吃十碗。有一个桌子用来摆放面条,桌子是空的的时候厨师开始做面条放到桌上,桌子上有一碗面时厨师等待;桌子上有一碗面条时客人可以吃面条,桌子是空的时,客人等待。
常用成员方法:
void wait() | 当前线程等待,直到被其他线程唤醒 |
void notify() | 随机唤醒一条线程 |
void notifyAll() | 唤醒全部线程 |
public class Cooker implements Runnable{
@Override
public void run() {
while(true){
synchronized(Desk.obj){
if(Desk.count==0){
break;
}else{
if(Desk.foodflag==1){
try {
Desk.obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
System.out.println("厨师做了一碗面。");
Desk.foodflag=1;
Desk.obj.notifyAll();
}
}
}
}
}
}
public class Fooder implements Runnable{
@Override
public void run() {
while(true){
synchronized(Desk.obj){
if(Desk.count==0){
break;
}else{
if(Desk.foodflag==0){
try {
Desk.obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else{
Desk.count--;
System.out.println("客人吃了一碗面条,还可以吃"+Desk.count+"碗。");
Desk.foodflag=0;
Desk.obj.notifyAll();
}
}
}
}
}
}
public class Desk {
public static int foodflag=0;
public static int count=10;
public static Object obj=new Object();
}
public class test {
public static void main(String[] args) {
Cooker c=new Cooker();
Fooder f=new Fooder();
Thread t1=new Thread(c);
Thread t2=new Thread(f);
t1.start();
t2.start();
}
}