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