void stateDependentMethod() throws InterruptedException {
//必须通过一个锁来保护条件谓词
synchronized(lock) {
while(!conditionPredicate)
lock.wait();
//现在对象处于合适的状态
}
}
当使用条件等待时(例如Object.wait或Condiotion.await):
- 通常都有一个条件谓词——包括一些对象状态的测试,线程在执行前必须首先通过这些测试。
- 在调用wait之前测试条件谓词,并且从wait中返回时再次进行测试。
- 在一个循环中调用wait。
- 确保使用与条件队列相关的锁来保护构成条件谓词的各个状态变量。
- 当调用twait、notify或notifyAll等方法时,一定要持有与条件队列相关的锁。
- 在检查条件谓词之后以及开始执行相应的操作之前,不要释放锁。