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();
	}
}