首页 > 解决方案 > 信号是否保证到达线程?

问题描述

假设我有三个线程,T1, T2, T3一个锁和一个资源上的lock一些条件。condResource

T1获取锁,现在cond.await()由于某些条件而T2获取锁,cond.signal()然后继续执行lock.unlock(),但是有一段时间,T3也试图获取锁,所以它在 行lock.lock(),到底发生了什么?

是否T2重新获得锁或确实T3获得它或者它是基于调度程序随机的?

标签: javamultithreadingoperating-systemlocking

解决方案


如果您阅读文档,即 的 javadoc ReentrantLock,它在第 3 段中专门回答了这个问题:

此类的构造函数接受一个可选的公平参数。设置时true,在争用情况下,锁有利于授予对等待时间最长的线程的访问权限。否则,此锁不保证任何特定的访问顺序。


推荐阅读