通知()后锁定采购订单

时间:2015-09-07 21:42:50

标签: java multithreading

假设线程T1正在等待进入同步块,并且线程T2在块内是wait(),并且线程T3在块的监视器上调用notify()

在T2进行之前T1是否可以进入该区块?或者T2优先吗?

1 个答案:

答案 0 :(得分:3)

  

在T2进行之前T1是否可以进入该区块?

是的,这是可能的。 Object.wait(int)的javadoc未指定已通知的线程优先。实际上,它指定应用普通调度规则。

  

"然后从该对象的等待集中删除线程T并重新启用线程调度。然后它以通常的方式与其他线程竞争,以便在对象上同步..."

这就是为什么需要像这样编码条件变量

的原因之一
  private boolean condition = ...
  private Object lock = new Object();  // mutex for 'condition'

  ...

  synchronize (lock) {
      while (!condition) {
           wait(lock);
           // It is UNSAFE to assume that 'condition' is true now.
      }
  }