【问题标题】:What happens to a Thread that fails to acquire a Semaphore?无法获取信号量的线程会发生什么?
【发布时间】:2011-04-28 11:46:53
【问题描述】:

当线程无法获取信号量时会发生什么(由于缺少许可)。会不会进入等待状态?

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

【问题讨论】:

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


    【解决方案1】:

    当线程无法获取信号量时会发生什么(由于缺少许可)。会不会进入等待状态?

    是的。如果你在谈论java.util.concurrent.Semaphore(和the aquire method,会发生这种情况:

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

    [...]

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

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

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

    tryAquire 顾名思义,只会尝试获取锁,如果没有许可,则不会阻塞返回 false。

    当信号量可用时,线程是否会开始恢复先前的执行序列。

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

    【讨论】:

    • 因此它被移动到 BLOCKED 状态,就像线程无法获取监视器锁时发生的情况一样。问题中的“等待状态”可能不是正确的词?
    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多