【发布时间】:2013-07-23 14:11:23
【问题描述】:
直接来自这个website:
但是如果我们将公平参数指定为“真”,而 创建一个新的 ReentrantLock 对象,它为我们提供了保证 等待时间最长的线程接下来将获得锁。听起来不错 对吧?
我认为它永远无法保证,它只会影响调度程序的决定。是不是还是上面链接的网站说的是真话?
提前致谢。
【问题讨论】:
标签: java multithreading synchronization reentrantlock
直接来自这个website:
但是如果我们将公平参数指定为“真”,而 创建一个新的 ReentrantLock 对象,它为我们提供了保证 等待时间最长的线程接下来将获得锁。听起来不错 对吧?
我认为它永远无法保证,它只会影响调度程序的决定。是不是还是上面链接的网站说的是真话?
提前致谢。
【问题讨论】:
标签: java multithreading synchronization reentrantlock
API documentation for ReentrantLock 说(我的重点):
这个类的构造函数接受一个可选的公平参数。 当设置为 true 时,在争用情况下,锁倾向于授予对 等待时间最长的线程。否则此锁不保证任何 特定的访问顺序。使用许多人访问的公平锁的程序 线程可能会显示较低的整体吞吐量(即较慢;通常 慢得多)比那些使用默认设置,但有更小的 获得锁和保证没有饥饿的时间差异。 但是请注意,锁的公平性并不能保证锁的公平性 线程调度。 因此,使用公平锁的许多线程之一可能 连续多次获取,同时其他活动线程 没有进展并且当前没有持有锁。另请注意, untimed tryLock 方法不遵守公平设置。它会 即使其他线程正在等待,如果锁可用,则成功。
所以看起来你引用的网站有点过于简单了。
【讨论】: