直接来自此website


  但是,如果我们将公平参数指定为“ true”,则
  创建一个新的ReentrantLock对象,它可以确保
  等待时间最长的线程将获得下一个锁。听起来不错
  对?


我以为它永远不能保证,它只会影响调度程序的决策。是不是上面链接的网站实际上是在说真话?

提前致谢。

最佳答案

API documentation for ReentrantLock说(我的重点):


  此类的构造函数接受一个可选的fairness参数。
  设置为true时,在争用下,锁倾向于授予对
  等待时间最长的线程。否则,此锁不能保证任何
  特定的访问顺序。使用许多人使用的公平锁的程序
  线程可能显示较低的整体吞吐量(即速度较慢;通常
  速度要比使用默认设置的速度慢得多,但要小得多
  获得锁并保证缺乏饥饿的时间变化。
  但是请注意,锁的公平性并不能保证
  线程调度。因此,使用公平锁定的许多线程之一可能
  其他活动线程正在连续获取多次
  没有进展,目前没有持有锁。另请注意
  不定时的tryLock方法不支持公平性设置。它会
  如果锁定可用,即使其他线程正在等待,也成功。


因此,您引用的网站似乎过于简化了。

关于java - 公平性可以保证FIFO调度吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17812673/

10-11 22:14