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

bli*_*egz 5 java concurrency multithreading semaphore java.util.concurrent

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

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

aio*_*obe 5

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

是。如果你谈论的是java.util.concurrent.Semaphore(和aquire方法,这是发生了什么:

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

[...]

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

  • 其他一些线程为此信号量调用release()方法,接下来将为当前线程分配一个许可;要么

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

tryAquire 但是,顾名思义,它将仅尝试获取该锁,并且如果没有许可,则禁止阻塞返回false。

当信号量变为可用时,线程将开始恢复先前的执行序列吗?

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