1
  1. 当使用而不是声明同步函数来更公平地防止java中的饥饿时,它不能实例化类型锁

  2. 是否需要像http://tutorials.jenkov.com/java-concurrency/starvation-and-fairness.html 那样实现 FairLock,java 的锁是否等于上面的FairLock?它说FairLock会降低性能,在实际实践中会怎样

    Lock lock = new Lock();
    
4

1 回答 1

3

您可能正在尝试实例化一个java.util.concurrent.locks.Lock,它是一个接口。那当然行不通。您需要实例化一个实现,例如ReentrantLock,这几乎是在 Java 中执行“灵活”锁的标准方式,以防简单的监视器锁不够用。它的文档对公平有话要说:

此类的构造函数接受一个可选的公平参数。当设置为 true 时,在争用情况下,锁有利于授予对等待时间最长的线程的访问权限。否则,此锁不保证任何特定的访问顺序。使用由许多线程访问的公平锁的程序可能会显示出比使用默认设置的程序更低的整体吞吐量(即,更慢;通常要慢得多),但在获取锁和保证不会出现饥饿的情况下具有更小的差异。但是请注意,锁的公平性并不能保证线程调度的公平性。因此,使用公平锁的许多线程之一可能会连续多次获得它,而其他活动线程没有进展并且当前没有持有锁。另请注意,不定时的 tryLock 方法不遵守公平设置。

于 2012-10-25T08:43:06.490 回答