Thread.State中等待和阻塞之间的区别

时间:2018-06-13 11:37:23

标签: java multithreading

自从我阅读有关Thread.State的官方解释以来,这个问题让我很困惑。

阻止

  

处于阻塞状态的线程正在等待监视器锁定以进入同步块/方法或在调用Object.wait后重新输入同步块/方法。

等待

  

处于等待状态的线程正在等待另一个线程执行特定操作。例如,在对象上调用Object.wait()的线程正在等待另一个线程在该对象上调用Object.notify()或Object.notifyAll()。调用Thread.join()的线程正在等待指定的线程终止。

另外,我在StackOverflow中阅读了一些很好的答案,例如Difference between WAIT and BLOCKED thread states,但我仍然不太确定等待阻止

考虑以下两种状态是否正确?

  • 正在等待:线程肯定执行wait()sleep()以放弃CPU周期;
  • 阻止:线程试图继续前进,但synchronized block等基本资源被其他人占用,因此他们必须否定 等待;

1 个答案:

答案 0 :(得分:-1)

当线程处于等待状态时,它会释放它所持有的对象的锁定,并将保持WAITING状态,直到任何其他线程在同一对象上调用notify()或notifyAll()。 BLOCKED线程正在等待其他线程释放它想要的锁。