从Object.notifyAll唤醒线程并且无法获取锁的地方在哪里?

时间:2019-05-01 04:32:50

标签: java synchronized

以下是监视器的工作方式: monitor

  • 调用Object.notifyAll()时会唤醒等待集中的线程。
  • 其中只有一个获得了锁,而其他人又被锁住了。
  • 被阻塞的线程去哪了?它们将返回等待集还是进入条目集?或者这是由操作系统管理的,因为监视器取决于操作系统MutexLock?

1 个答案:

答案 0 :(得分:0)

监视器是您应该了解的基本概念。最好在某个地方阅读它。

简而言之,我可以说有一些主要原则:

  1. 如果线程进入同步块-同步对象的监视器被阻止,而所有其他线程无法 执行同步块(它们在条目集中)。
  2. 如果您在同步对象上调用wait()方法,则线程转到Wait Set
  3. 如果在同步对象上调用notify()/ notifyAll()方法,则意味着一个/所有线程都从“等待集中”进入“入口集中”。

您的问题的答案是-当您调用notifyAll()方法时,等待集中的所有线程都进入条目集。