首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Java理解公平的ReentrantLock

用Java理解公平的ReentrantLock
EN

Stack Overflow用户
提问于 2020-03-28 15:57:21
回答 1查看 555关注 0票数 2

ReentrantLock API文档说:

  1. 这个类的构造函数接受一个可选的公平参数。当设置为true时,在争用项下,锁倾向于授予对等待时间最长的线程的访问权限。
  2. 但是,请注意,锁的公平性并不能保证线程调度的公平性。因此,使用公平锁的多个线程中的一个可以连续多次获得该锁,而其他活动线程则没有进展,目前也没有保存该锁。

我无法理解第二点:

如果一个线程连续多次获得锁,那么按照第1点,其他线程将等待更长时间,这意味着它们下一次将获得锁。那么,这如何不影响线程调度的公平性呢?因此,我觉得公平的锁是最长的等待时间第一线程调度。

EN

回答 1

Stack Overflow用户

发布于 2020-03-28 17:39:59

我认为他们只是想把公平逻辑和调度逻辑分开。线程可能是并发的,但这并不意味着它们试图同时访问锁。线程优先级请求仅仅是对操作系统的“提示”,并且是可能期望的从来没有保证

因此,仅仅因为有线程A和B,它们可能请求一个锁,甚至可能具有相同的行为,一个线程就可以在其他锁请求之前执行、获取、释放、重新获取:

A: Request Lock -> Release Lock -> Request Lock Again (Succeeds) B: Request Lock (Denied)... ----------------------- Time --------------------------------->

线程调度逻辑与锁逻辑解耦。

还有其他调度问题,其负担往往落在软件设计人员身上,请参阅饥饿与利夫洛克

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60903107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档