直接从这个网站:
但是,如果我们在创建新的 ReentrantLock 对象时将公平参数指定为“true”,则可以保证等待时间最长的线程接下来会获得锁。听起来不错吧?
我认为它永远无法保证,它只会影响调度程序的决定。是不是还是上面链接的网站说的是真的?
提前致谢。
直接从这个网站:
但是,如果我们在创建新的 ReentrantLock 对象时将公平参数指定为“true”,则可以保证等待时间最长的线程接下来会获得锁。听起来不错吧?
我认为它永远无法保证,它只会影响调度程序的决定。是不是还是上面链接的网站说的是真的?
提前致谢。
ReentrantLock的API 文档说(我的重点):
此类的构造函数接受一个可选的公平参数。当设置为 true 时,在争用情况下,锁有利于授予对等待时间最长的线程的访问权限。否则,此锁不保证任何特定的访问顺序。使用由许多线程访问的公平锁的程序可能会显示出比使用默认设置的程序更低的整体吞吐量(即,更慢;通常要慢得多),但在获取锁和保证不会出现饥饿的情况下具有更小的差异。 但是请注意,锁的公平性并不能保证线程调度的公平性。因此,使用公平锁的许多线程之一可能会连续多次获得它,而其他活动线程没有进展并且当前没有持有锁。另请注意,不定时的 tryLock 方法不遵守公平设置。如果锁可用,即使其他线程正在等待,它也会成功。
所以看起来你引用的网站有点过于简单化了。