5

当线程无法获取信号量(由于缺少许可)时会发生什么。会不会进入等待状态?

编辑:当信号量可用时,线程是否会开始恢复先前的执行序列。

4

1 回答 1

5

当线程无法获取信号量(由于缺少许可)时会发生什么。会不会进入等待状态?

是的。如果您正在谈论java.util.concurrent.Semaphore(以及方法aquire这就是发生的情况:

从这个信号量获取一个许可,阻塞直到有一个可用,或者线程被中断。

[...]

如果没有可用的许可,则当前线程出于线程调度目的而被禁用并处于休眠状态,直到发生以下两种情况之一:

  • 其他一些线程为此信号量调用 release() 方法,然后为当前线程分配一个许可;或者

  • 其他一些线程中断当前线程。

tryAquire然而,顾名思义,它将只尝试获取锁,而不是阻塞返回 false 如果它没有许可。

当信号量可用时,线程是否开始恢复先前的执行序列。

是的。如果另一个线程调用release这个线程可能会返回acquire并继续它的执行。

于 2010-10-21T08:45:06.577 回答