【发布时间】:2011-04-28 11:46:53
【问题描述】:
当线程无法获取信号量时会发生什么(由于缺少许可)。会不会进入等待状态?
编辑:当信号量可用时,线程是否会开始恢复先前的执行序列。
【问题讨论】:
标签: java multithreading concurrency semaphore java.util.concurrent
当线程无法获取信号量时会发生什么(由于缺少许可)。会不会进入等待状态?
编辑:当信号量可用时,线程是否会开始恢复先前的执行序列。
【问题讨论】:
标签: java multithreading concurrency semaphore java.util.concurrent
当线程无法获取信号量时会发生什么(由于缺少许可)。会不会进入等待状态?
是的。如果你在谈论java.util.concurrent.Semaphore(和the aquire method,会发生这种情况:
从这个信号量获取一个许可,阻塞直到有一个可用,或者线程被中断。
[...]
如果没有可用的许可,则当前线程将被禁用以用于线程调度目的并处于休眠状态,直到发生以下两种情况之一:
其他一些线程为此信号量调用 release() 方法,并且当前线程接下来被分配一个许可;或
其他线程中断当前线程。
tryAquire 顾名思义,只会尝试获取锁,如果没有许可,则不会阻塞返回 false。
当信号量可用时,线程是否会开始恢复先前的执行序列。
是的。如果另一个线程调用release,该线程可能会从acquire 返回并继续执行。
【讨论】: