假设我有三个线程,T1, T2, T3一个锁lock和cond一个Resource资源上的一些条件。T1获得锁,现在cond.await()由于某些条件而T2获得该锁,cond.signal()然后继续执行lock.unlock(),但有一段时间,T3也试图获得锁,所以它位于 的行lock.lock(),究竟发生了什么?是T2重新获得锁还是获得了锁,还是T3基于 scheudler 是随机的?
2 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
如果您阅读了文档,即 的 javadoc ReentrantLock
,它会在第 3 段中专门回答这个问题:
此类的构造函数接受一个可选的公平参数。当 set 时
true
,在争用情况下,锁倾向于授予对等待时间最长的线程的访问权限。否则这个锁不能保证任何特定的访问顺序。
添加回答
举报
0/150
提交
取消