【发布时间】:2018-05-08 11:47:03
【问题描述】:
这个问题完全是理论上的,很抱歉,这次我无法避免。
我正在学习ReentrantLock 和read this:
但是请注意,锁的公平性并不能保证线程调度的公平性。
这是什么意思?我怎么能想象这个?
假设现在没有人持有锁:
- 线程调度器唤醒
t1线程(谁不是等待时间最长的线程) -
t1尝试获取锁 - 锁拒绝
t1,因为t1不是等待时间最长的线程 -
t1睡觉了 - 线程调度程序唤醒一个线程
Java 是否以这种方式工作?在非常不成功的情况下,这将意味着大量的上下文切换(这会导致吞吐量下降,这在文档中有所说明)。
【问题讨论】:
-
Doc 说公平锁保证不会出现饥饿,但是许多线程之一可能会连续多次获得锁,而其他线程没有进展。意味着它不会避免最近释放的线程再次获得锁同一个锁
-
@OomphFortuity 那么公平参数的目的是什么。
标签: java multithreading reentrantlock