首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用锁实现Java多线程同步

用锁实现Java多线程同步
EN

Stack Overflow用户
提问于 2016-04-24 06:52:35
回答 1查看 98关注 0票数 3

在Java中,我们可以通过使用Lock接口和ReentrantLock类实现公平性,如下所示:

代码语言:javascript
运行
复制
Lock lock=new ReentrantLock(true);

一旦我们实现了公平性,那么在多个线程等待访问锁的情况下,等待时间最长的线程被赋予访问锁的权限。

有谁能提供JVM如何让线程等待很长时间的详细信息,即JVM是如何实现公平性的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-24 07:33:11

详细信息在源代码中。而源代码可以通过谷歌找到:

  • "java.util.concurrent.locks.ReentrantLock源“
  • "java.util.concurrent.locks.AbstractQueuedSynchronizer源“

代码注释得非常好。

简单的回答是,每个锁都有一个等待线程队列,该队列被实现为一个链接列表。

  • 在“公平”的情况下,当队列非空时试图获取锁的线程将被添加到队列的末尾。
  • 在“不公平”的情况下,如果锁当前是空闲的,线程可以强行进入。这提供了更好的性能,因为您不需要执行线程上下文切换,这需要一个syscall。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36820181

复制
相关文章

相似问题

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