wait/notify机制在生活中比比皆是,
例如在就餐时就会出现,如图
厨师和服务员的交互发生在
“菜品传递台
”
上,在这期间需考虑以下几个问题。
1)厨师做完一个菜的时间未定,所以厨师将菜品放到
“
菜品传递台
”
上的时间也未定。
2)服务员取到菜的时间取决于厨师,所以服务员就有
“
等待
”
(
wait
)状态。
3)服务员如何取到菜呢,这取决于厨师,厨师将菜放在
“
菜品传递台
”
上,其实相当于一种通
知(
notify),这时服务员才可以拿到菜并交给就餐者。
在这个过程中出现了wait/notify机制
需要说明的是,前面多个线程之间也可以实现通信,原因是多个线程共同访问同一个
变量,但那种通信机制不是
wait/notify机制,两个线程完全是主动式地操作同一个共享变量,在花
费读取时间的基础上,读到的值是不是想要的,并不能完全确定,例如,前面示例中添加了
“Thread.sleep
(
2000
);
”
代码,导致
B线程不能退出,所以现在迫切需要引入
wait/notify
机制来满
足上面的需求。