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

前端之家收集整理的这篇文章主要介绍了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个任务队列,则不需要一个队列永远等待,从不获取锁定.

猜你在找的Java相关文章