首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java锁和条件

Java锁和条件
EN

Stack Overflow用户
提问于 2014-04-23 02:13:52
回答 2查看 139关注 0票数 1

假设我有三个线程,线程1、线程2和线程3都共享相同的锁。线程2获取锁,做一些工作,然后通过调用等待方法来阻止。然后线程1获取锁,做一些工作,在锁的中间,线程3试图获取锁,但由于线程1持有锁,线程3被阻塞。线程1完成工作,并在终止前向线程2发出信号,表示它可以重新获得锁。那会发生什么呢?接下来线程2或线程3会获得锁吗?

非常感谢您的时间和帮助提前。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-23 02:32:57

如果没有优先权,谁先来谁就会得到锁。

虽然mutual exclusion可以提供safety属性,但它不能确保liveness属性。在某些情况下,线程总是先来获取锁,从而导致starvation (其他线程会永远等待,因为有人一直占住)。

谷歌的关键词突出显示将帮助您了解更多。我发现这些幻灯片非常全面的schedule.pdf

票数 2
EN

Stack Overflow用户

发布于 2014-11-19 18:56:16

如果使用的是ReentrantLock (或其任何子类),则可以将“公平”标志传递给构造函数。如果设置为true,这将确保锁的控制传递给等待时间最长的线程,在本例中是线程1。

代码语言:javascript
复制
Lock lock = new ReentrantLock(true);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23233623

复制
相关文章

相似问题

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