线程从Object.notifyAll中被唤醒并且无法获得锁定?

问题描述 投票:0回答:1

以下是监视器的工作原理:monitor

  • 调用Object.notifyAll()时,唤醒等待集中的线程。
  • 只有其中一个获得锁定,而其他人再次被阻止。
  • 那么被阻塞的线程在哪里?它们会回到等待集还是进入入口集?或者这是由os管理的,因为监视器依赖于os MutexLock?
java synchronized
1个回答
0
投票

显示器是您应该理解的基本概念。最好在某个地方阅读它。

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

  1. 如果一个线程进入同步块 - 同步对象的监视器被阻塞,所有其他线程无法执行同步块(它们在条目集中)。
  2. 如果在同步对象上调用wait()方法,则该线程转到Wait Set
  3. 如果在同步对象上调用notify()/ notifyAll()方法,则表示一个/所有线程从Wait Set转到Entry Set。

您的问题的答案是 - 当您调用notifyAll()方法时,来自Wait Set的所有线程都转到Entry Set。

© www.soinside.com 2019 - 2024. All rights reserved.