首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ReentrantLock公平性参数

ReentrantLock公平性参数
EN

Stack Overflow用户
提问于 2017-11-24 12:47:32
回答 2查看 2.1K关注 0票数 3

这个问题完全是理论性的,我很抱歉,但这次我不能回避。我正在学习ReentrantLock阅读这篇文章

但是,请注意,锁的公平性并不能保证线程调度的公平性。

这是什么意思?我怎么能想象得到呢?

假设现在没有人持有锁:

  1. 线程调度程序唤醒t1线程(谁不是等待时间最长的线程)
  2. t1试图获取锁
  3. 锁拒绝t1,因为t1不是等待时间最长的线程
  4. t1睡着了
  5. 线程调度程序唤醒线程。

Java是这样工作的吗?在一个非常不成功的情况下,这将意味着大量的上下文切换(这将导致糟糕的吞吐量,这将写入文档中)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-24 13:02:18

这是什么意思?

操作系统会安排线程在任何时候运行。

我怎么能想象得到呢?

操作系统几乎不知道JVM下一步想要运行什么。

Java是这样工作的吗?

是的,Java并不控制操作系统调度程序。

票数 5
EN

Stack Overflow用户

发布于 2018-09-02 09:20:00

这是什么意思?

这意味着线程保持锁可以继续持有锁,只要它愿意,并且可以连续多次重新获取相同的锁,等待时间最长的线程将一直等待到当前线程释放锁为止。

因此,只有在锁是空闲的情况下,公平保证才会发挥作用,而java线程调度程序必须决定应该将锁分配给哪个线程。并且给出了最长等待线程(在同步的情况下,它是随机的)。

这也意味着持有锁的线程没有被频繁地调度,其他线程被给予更多的CPU时间,因此这个线程无法完成,因此不能释放锁。

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

https://stackoverflow.com/questions/47473650

复制
相关文章

相似问题

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