【发布时间】:2014-01-16 17:32:48
【问题描述】:
方法Condition.newCondition()的Javadoc声明“等待方法返回的线程重新获取锁的顺序与最初获取锁的线程相同,默认情况下未指定,但为了公平起见锁有利于那些等待时间最长的线程。"
这是否意味着,对于显式锁,从条件中唤醒的线程与最初获取锁的线程一起竞争锁获取,就像隐式锁一样?
换句话说,有两组线程,一组是第一次尝试获取锁,另一组是在等待条件并发出信号后尝试重新获取锁,是后者在锁获取上比前者更受青睐?
锁公平值是否会以任何方式影响这两组的锁获取顺序?
【问题讨论】:
-
除非你有一个公平的锁,否则它应该是“未定义的”(即它实际上取决于你的操作系统线程调度程序)。操作系统可能不知道线程是否已经在等待并且现在是否正在重新获取,因此这些组之间应该没有区别。另一方面,公平锁更喜欢最长的等待,无论它们等待的原因是什么。
标签: java multithreading locking