无法获取信号量的线程会发生什么?

时间:2010-10-21 08:42:01

标签: java multithreading concurrency semaphore java.util.concurrent

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

编辑:当信号量变为可用时,线程是否会恢复上一个执行序列。

1 个答案:

答案 0 :(得分:5)

  

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

是。如果您正在谈论java.util.concurrent.Semaphore(以及the aquire method,则会发生这种情况:

  

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

     

[...]

     

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

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

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

  •   
然而,顾名思义,

tryAquire只会尝试获取锁定,而不是在没有许可证的情况下阻止返回false。

  

当信号量可用时,线程是否会恢复上一个执行序列。

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