释放锁定时,监视器的Entry集中的线程会发生什么?

时间:2016-01-31 13:14:57

标签: java multithreading

众所周知,在Java中,有一个与任何对象相关联的监视器。 当某个线程持有监视器时,任何其他尝试获取监视器的线程都将被阻塞并放入监视器的条目集中。 当监视器被释放时,在条目集中等待的线程会发生什么?

据我所知,如果释放监视器的线程调用了Object.notify / notifyAll,那么监视器的Wait Set中的一个线程或所有线程被移动到Entry Set。 对于条目集中的线程,它们是否都将被恢复,即它们的状态从BLOCKED变为RUNNABLE?

1 个答案:

答案 0 :(得分:0)

  

将全部恢复

如果所有线程都将被恢复,那么任一同步将不起作用(因为它们都将获得锁定)或者所有线程将重新进入入口集,并且幸运者将获得锁定。虽然第一种方法不正确,但第二种方法显然存在性能问题。

很明显,来自条目集的随机(除非锁定是公平的)线程获得锁定并恢复其工作流程。

您可能对下一个article感兴趣 - 请注意上一个diagram