回答

4

当线程无法获取信号量时(由于缺少许可证)会发生什么情况。它会被转移到等待状态吗?

是的。如果你在谈论java.util.concurrent.Semaphore(和the aquire method这是发生了什么:

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

[...]

如果没有可用的许可,那么当前线程用于线程调度目的,禁用并一直处于休眠状态的发生两种情况之一:

  • 其他一些线程调用此信号量的release()方法,并且当前线程旁边将被分配一个许可证;或

  • 某些其他线程会中断当前线程。

tryAquire将然而,顾名思义,只能尽量将收购的锁,而不是阻塞返回false,如果它没有许可证。

当信号量变为可用时,线程是否会恢复前一个执行顺序?

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

+0

因此它被移动到BLOCKED状态,就像当线程无法获得监视器锁定时发生的情况。问题中的“等待状态”可能不是正确的词? – blitzkriegz 2010-10-21 09:16:43

相关问题