Java信号量等待空闲对其他线程的影响



假设我正在管理我的线程池,所以没有饥饿…

当我使用信号量或其他同步器时,信号量导致线程等待直到指定的事件发生(例如信号量释放令牌),等待线程(它什么都不做)仍然可以与活动线程竞争处理器资源吗?或者在信号量释放令牌之前,它是否会在资源方面处于次要地位?

Semaphore.acquire的Javadoc对此非常明确:

如果没有可用的许可证,则当前线程变为被禁用线程调度目的休眠,直到两种情况之一发生:[…]

所以,是的,等待线程在资源方面处于次要位置,直到许可可用。

等待线程进入睡眠状态。它不占用任何处理器时间,也就是说,它在轮询等待条件为真时不执行繁忙等待。只是调度器不会考虑它。当线程再次空闲时,该信号量将显式唤醒线程。

最新更新