微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 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个任务队列,则不需要一个队列永远等待,从不获取锁定.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐