class Ham {
static Object box = new Object(); // 汉堡箱子
static int totalMaterial = 6;
// 制作汉堡材料的总量
static int sales = 0;
// 汉堡最初的销售量
static int production = 3;
// 顾客光临之前,已有3个
}
class HMaker extends Thread { // 厨师类
void make() { // 制作汉堡
synchronized (Ham.box) {
Ham.production++;
// 制作一个就放入箱内
System.out.println("厨师:这里有汉堡!" + Ham.production + "个");
Ham.box.notify(); // 唤醒营业员
}
}
public void run() {
while (Ham.production < Ham.totalMaterial) {
try {
sleep(3000);
// 做一个汉堡,需等待3秒钟
} catch (InterruptedException ie) {
}
make(); // 做一个汉堡
}
}
}
class HAssistant extends Thread { // 营业员类
void sell() { // 销售一个汉堡
synchronized (Ham.box) {
if (Ham.production == Ham.sales) {
// 箱子内无汉堡时
System.out.println("营业员:请稍等");
try {
Ham.box.wait();
// 等待被唤醒
} catch (InterruptedException ie) {
}
}
Ham.sales++; // 取出汉堡,销售量增加
System.out.println("营业员:顾客,汉堡来了,共" + Ham.sales);
}
}
public void run() {
while (Ham.sales < Ham.totalMaterial) {
System.out.println("顾客定汉堡");
sell();
try {
sleep(1000);
// 每个一秒销售一个汉堡
} catch (InterruptedException ie) {
}
}
}
}
public class Sychronized1 {
public static void main(String[] args) {
HMaker maker = new HMaker();
HAssistant assistant = new HAssistant();
maker.start();
assistant.start();
}
}