首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >威尔Semaphore.tryAcquire(.)阻止还是旋转直到获得许可?

威尔Semaphore.tryAcquire(.)阻止还是旋转直到获得许可?
EN

Stack Overflow用户
提问于 2012-10-03 12:49:34
回答 1查看 7.1K关注 0票数 1

如果不公平的信号量许可不能立即获得,那么tryAcquire(long timeout, TimeUnit unit)块会一直到许可可用(即屈服执行),还是会一直旋转到许可可用为止?

如果调用自旋,并且一个系统有大量的信号量,那么系统运行的不是有很多旋转信号量的风险吗?

EN

回答 1

Stack Overflow用户

发布于 2012-10-03 12:55:32

根据javadoc:

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

  • 其他一些线程调用此信号量的release()方法,接下来将为当前线程分配许可;或
  • 其他一些线程中断当前线程;或
  • 指定的等待时间已过去。

这表明线程被标记为阻塞(将阻塞队列设置为灰色状态),这允许处理器执行其他工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12708871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档