java - 公平锁和非公平锁的区别?
迷茫
迷茫 2017-04-18 09:46:51
0
2
438

此类的构造方法接受一个可选的公平 参数。当设置为 true 时,在多个线程的争用下,这些锁倾向于将访问权授予等待时间最长的线程。否则此锁将无法保证任何特定访问顺序。与采用默认设置(使用不公平锁)相比,使用公平锁的程序在许多线程访问时表现为很低的总体吞吐量(即速度很慢,常常极其慢),但是在获得锁和保证锁分配的均衡性时差异较小。不过要注意的是,公平锁不能保证线程调度的公平性。因此,使用公平锁的众多线程中的一员可能获得多倍的成功机会,这种情况发生在其他活动线程没有被处理并且目前并未持有锁时。还要注意的是,未定时的 tryLock 方法并没有使用公平设置。因为即使其他线程正在等待,只要该锁是可用的,此方法就可以获得成功。

这段话是java.util.concurrent.locks.ReentrantLock中的介绍, 其中对于公平锁的介绍我很不理解.

  1. 为什么"公平锁不能保证线程调度的公平性", 是因为不同线程对于锁的占用时间不同, 导致对于短作业的线程不利吗?

  2. "使用公平锁的众多线程中的一员可能获得多倍的成功机会"这句话是什么意思

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

reply all(2)
洪涛

If you add the factor of thread scheduling mechanism, it is not difficult to understand...
Fair lock also depends on whether the object is obtained for the first time, and there is also the concept of reentrant lock
Second point. . There is a "concession" in the thread, but it only sends a signal. Whether it is processed or not depends on the mood of the scheduling mechanism. In the same way, even if the fair lock is successful, it depends on the scheduling mechanism

洪涛

The scheduling thread is controlled by the operating system, not the lock. The lock can only guarantee that the lock is given to the thread that has waited the longest, but it is useless if the operating system does not schedule this thread.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template