厨师,顾客,订餐的多线程示例程序
1)wait方法要在一个循环中
public void waitForChef() throws InterruptedException {
while (readyFlag)
wait();
}
2)由于厨师线程有多个,顾客有多个,所以要用notifyAll方法,而不是notify,因为notify很容易就产生死锁
3)TimeUnit.MILLISECONDS.sleep(200); 用于降低程序的运行速度,用于示例
4)
while (!Thread.interrupted()) { <span style="font-family: Arial, Helvetica, sans-serif;">}</span>
用于检测异常,异常可能发生在sleep()方法中,也可能发生在wait方法中,也可能在while体中的其他部分,这时候下次执行while便会退出while循环,
由于
Thread.interrupted()
方法会清楚异常标识,所以最后
e