在java中使用Thread wait()方法时,是否需要使用while语句而不是if语句

时间:2016-07-13 08:52:11

标签: java multithreading

例如,如果我有这段代码:

{{1}}

我可以用if切换片段吗?

1 个答案:

答案 0 :(得分:1)

是的,这是必要的。

首先:或许会发生以下情况:

  1. 线程1开始等待。
  2. 线程2开始等待。
  3. 线程3使条件成立并调用notifyAll。
  4. 线程1醒来。
  5. 线程1再次使条件为假。
  6. 线程2醒来。
  7. 现在线程2不应该只假设条件为真,因为它不是!

    另一方面,虚假唤醒是可能的。这意味着wait可能完全没有任何理由(或没有与您的程序相关的原因)返回 - 例如,如果调试器附加到您的程序,它可能会返回。