加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 信号量类中的公平设置

发布时间:2020-12-14 05:30:04 所属栏目:Java 来源:网络整理
导读:我正在努力了解公平财产在 Semaphore 年级的有用性. 具体地引用Javadoc提到: Generally,semaphores used to control resource access should be initialized as fair,to ensure that no thread is starved out from accessing a resource. When using semap
我正在努力了解公平财产在 Semaphore年级的有用性.

具体地引用Javadoc提到:

Generally,semaphores used to control resource access should be initialized as fair,to ensure that no thread is starved out from accessing a resource. When using semaphores for other kinds of synchronization control,the throughput advantages of non-fair ordering often outweigh fairness considerations.

有人可以提供一个例子,在这里可能需要驳船.我不能想到过去的资源访问用例.另外,为什么默认是非公平的行为?

最后,使用公平行为有什么性能影响?

解决方法

Java的内置并发结构(synchronized,wait(),notify(),…)不指定在释放锁时应该释放哪个线程.由JVM实现决定要使用哪种算法.

公平给你更多的控制:当锁释放时,等待时间最长的线程被赋予锁(FIFO处理).没有公平(并且使用非常糟糕的算法),您可能会遇到一个线程总是等待锁的情况,因为有一个连续的其他线程流.

如果信号量被设置为公平,那么它的开销很小,因为它需要维护所有等待锁的线程的队列.除非您正在撰写高吞吐量/高性能/许多内核应用程序,否则您不会看到差异!

不需要公平的场景

如果你有N个相同的工作线程,那么任何一个任务执行就没关系

需要公平的场景

如果您有N个任务队列,则不需要一个队列永远等待,从不获取锁定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读