bli*_*egz 5 java concurrency multithreading semaphore java.util.concurrent
当线程无法获取信号量时(由于缺少许可证)会发生什么.它会被转移到等待状态吗?
编辑:当信号量可用时,线程是否会恢复先前的执行序列.
当线程无法获取信号量时(由于缺少许可)会发生什么。它将移至等待状态吗?
是。如果你谈论的是java.util.concurrent.Semaphore
(和的aquire
方法,这是发生了什么:
从此信号量获取许可,直到获得一个许可或线程被中断为止一直阻塞。
[...]
如果没有可用的许可,则出于线程调度的目的,当前线程将被禁用,并处于休眠状态,直到发生以下两种情况之一:
其他一些线程为此信号量调用release()方法,接下来将为当前线程分配一个许可;要么
其他一些线程中断当前线程。
tryAquire
但是,顾名思义,它将仅尝试获取该锁,并且如果没有许可,则禁止阻塞返回false。
当信号量变为可用时,线程将开始恢复先前的执行序列吗?
是。如果另一个线程调用,则release
该线程可能从中返回acquire
并继续执行。