当线程无法获取信号量(由于缺少许可)时会发生什么。会不会进入等待状态?
编辑:当信号量可用时,线程是否会开始恢复先前的执行序列。
当线程无法获取信号量(由于缺少许可)时会发生什么。会不会进入等待状态?
编辑:当信号量可用时,线程是否会开始恢复先前的执行序列。
当线程无法获取信号量(由于缺少许可)时会发生什么。会不会进入等待状态?
是的。如果您正在谈论java.util.concurrent.Semaphore
(以及方法aquire
,这就是发生的情况:
从这个信号量获取一个许可,阻塞直到有一个可用,或者线程被中断。
[...]
如果没有可用的许可,则当前线程出于线程调度目的而被禁用并处于休眠状态,直到发生以下两种情况之一:
其他一些线程为此信号量调用 release() 方法,然后为当前线程分配一个许可;或者
其他一些线程中断当前线程。
tryAquire
然而,顾名思义,它将只尝试获取锁,而不是阻塞返回 false 如果它没有许可。
当信号量可用时,线程是否开始恢复先前的执行序列。
是的。如果另一个线程调用release
这个线程可能会返回acquire
并继续它的执行。