《Java并发编程实战》笔记-状态依赖方法的标准形式

时间:2023-03-08 22:30:15

void stateDependentMethod() throws InterruptedException {

//必须通过一个锁来保护条件谓词

synchronized(lock) {

while(!conditionPredicate)

lock.wait();

//现在对象处于合适的状态

}

}

当使用条件等待时(例如Object.wait或Condiotion.await):

  • 通常都有一个条件谓词——包括一些对象状态的测试,线程在执行前必须首先通过这些测试。
  • 在调用wait之前测试条件谓词,并且从wait中返回时再次进行测试。
  • 在一个循环中调用wait。
  • 确保使用与条件队列相关的锁来保护构成条件谓词的各个状态变量。
  • 当调用twait、notify或notifyAll等方法时,一定要持有与条件队列相关的锁。
  • 在检查条件谓词之后以及开始执行相应的操作之前,不要释放锁。