ReentrantLock是公平锁还是非公平锁?
1 个回答
能轻易失去的东西,我从未觉得重要。白云飞**都可以。**`ReentrantLock` 支持**公平**和**非公平**两种模式: * **默认是非公平锁**:`new ReentrantLock()` 吞吐量高,可“插队”(只要锁空闲,后来的线程也能直接抢到),可能造成个别线程长期得不到锁。 * **公平锁**:`new ReentrantLock(true)` 近似 FIFO,优先唤醒**等待最久**的线程(基于 AQS 队列 `hasQueuedPredecessors()` 判断),插队被抑制,开销更大、性能略低。 补充要点: * 二者都**可重入**:同一线程再次加锁只会增加计数(即使是公平锁,持有者重入不受排队限制)。 * 内部实现基于 AQS:公平版 `FairSync` vs 非公平版 `NonfairSync`。 * 需要更强的先来先服务时选**公平**;更看重吞吐时选**非公平(默认)**。发布于 2025-08-18 10:10 •IP属地 江苏举报评论收藏
公众号进入网站体验更佳

