【发布时间】:2014-08-07 16:35:46
【问题描述】:
假设我正在管理我的线程池,所以没有饥饿......
当我使用信号量或其他同步器时,信号量会导致线程等待指定事件发生(例如,信号量释放令牌),等待线程(什么都不做)是否仍会竞争处理器资源针对活动线程?还是在信号量释放令牌之前在资源方面处于次要地位?
【问题讨论】:
标签: java multithreading semaphore
假设我正在管理我的线程池,所以没有饥饿......
当我使用信号量或其他同步器时,信号量会导致线程等待指定事件发生(例如,信号量释放令牌),等待线程(什么都不做)是否仍会竞争处理器资源针对活动线程?还是在信号量释放令牌之前在资源方面处于次要地位?
【问题讨论】:
标签: java multithreading semaphore
Javadoc for Semaphore.acquire 对此非常明确:
如果没有可用的许可,则当前线程变为禁用 线程调度目的和处于休眠状态直到两件事之一 发生:[...]
所以是的,等待线程在资源方面处于次要地位,直到获得许可为止。
【讨论】:
等待线程进入睡眠状态。它不占用任何处理器时间,即,它在轮询等待条件是否为真时不执行忙等待。调度程序只是不考虑它。一旦线程再次空闲,信号量将显式唤醒线程。
【讨论】: