直接来自此website:
但是,如果我们将公平参数指定为“ true”,则
创建一个新的ReentrantLock对象,它可以确保
等待时间最长的线程将获得下一个锁。听起来不错
对?
我以为它永远不能保证,它只会影响调度程序的决策。是不是上面链接的网站实际上是在说真话?
提前致谢。
最佳答案
API documentation for ReentrantLock说(我的重点):
此类的构造函数接受一个可选的fairness参数。
设置为true时,在争用下,锁倾向于授予对
等待时间最长的线程。否则,此锁不能保证任何
特定的访问顺序。使用许多人使用的公平锁的程序
线程可能显示较低的整体吞吐量(即速度较慢;通常
速度要比使用默认设置的速度慢得多,但要小得多
获得锁并保证缺乏饥饿的时间变化。
但是请注意,锁的公平性并不能保证
线程调度。因此,使用公平锁定的许多线程之一可能
其他活动线程正在连续获取多次
没有进展,目前没有持有锁。另请注意
不定时的tryLock方法不支持公平性设置。它会
如果锁定可用,即使其他线程正在等待,也成功。
因此,您引用的网站似乎过于简化了。
关于java - 公平性可以保证FIFO调度吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17812673/