package com.t1009;
class Order {
/**
* 订单类
* */
private static int i = 0;
private int count = i++;
public Order() {
if (count == 10) {
System.out.println(" out of food,closing");
System.exit(0);
}
}
public String toString() {
return "Order " + count;
}
}
class WaitPerson extends Thread {
/**
* 服务员
* */
private Restaurant restaurant;
public WaitPerson(Restaurant r) {
this.restaurant = r;
start();
}
@Override
public void run() {
while (true) {
//如果没有订单,那么服务员wait()继续等待
while (restaurant.order == null) {
synchronized (this) {
try {
wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
//如果有订单,打印出订单号,并将订单标志为null,说明该订单已处理
System.out.println("WaitPerson got" + restaurant.order);
restaurant.order = null;
}
}
}
}
class Chef extends Thread {
/**
* 厨师
* */
private Restaurant restaurant;
private WaitPerson waitperson;
public Chef(Restaurant r, WaitPerson w) {
this.restaurant = r;
this.waitperson = w;
start();
}
@Override
public void run() {
while (true) {
if (restaurant.order == null) {
restaurant.order = new Order();
System.out.println("Order up!");
//厨师将订单上面的菜制作好后,将服务员唤醒
synchronized (waitperson) {
waitperson.notify();
}
}
try {
sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
public class Restaurant {
/**
* 餐馆
* */
Order order;
public static void main(String[] args) {
Restaurant restaurant=new Restaurant();
WaitPerson waitPerson=new WaitPerson(restaurant);
Chef chef=new Chef(restaurant,waitPerson);
}
}
class Order {
/**
* 订单类
* */
private static int i = 0;
private int count = i++;
public Order() {
if (count == 10) {
System.out.println(" out of food,closing");
System.exit(0);
}
}
public String toString() {
return "Order " + count;
}
}
class WaitPerson extends Thread {
/**
* 服务员
* */
private Restaurant restaurant;
public WaitPerson(Restaurant r) {
this.restaurant = r;
start();
}
@Override
public void run() {
while (true) {
//如果没有订单,那么服务员wait()继续等待
while (restaurant.order == null) {
synchronized (this) {
try {
wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
//如果有订单,打印出订单号,并将订单标志为null,说明该订单已处理
System.out.println("WaitPerson got" + restaurant.order);
restaurant.order = null;
}
}
}
}
class Chef extends Thread {
/**
* 厨师
* */
private Restaurant restaurant;
private WaitPerson waitperson;
public Chef(Restaurant r, WaitPerson w) {
this.restaurant = r;
this.waitperson = w;
start();
}
@Override
public void run() {
while (true) {
if (restaurant.order == null) {
restaurant.order = new Order();
System.out.println("Order up!");
//厨师将订单上面的菜制作好后,将服务员唤醒
synchronized (waitperson) {
waitperson.notify();
}
}
try {
sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
public class Restaurant {
/**
* 餐馆
* */
Order order;
public static void main(String[] args) {
Restaurant restaurant=new Restaurant();
WaitPerson waitPerson=new WaitPerson(restaurant);
Chef chef=new Chef(restaurant,waitPerson);
}
}