等待方遵循原则
- 获取对象的锁
- 如果条件不满足,那么调用对象的wait(),被通知后仍要检查条件
- 条件满足则执行对应的逻辑
伪代码如下:
1 | synchronized( 对象 ) { |
通知方遵循原则
- 获得对象的锁
- 改变条件
- 通知所有等待在对象上的线程
伪代码如下:
1 | synchronized ( 对象 ) { |
代码示例
1 | public class WaitNotify { |
运行结果:
1 | Thread[WaitThread,5,main]flag is true. wait @ 21:35:39 |
