2

我在看ArrayBlockingQueue

对于fair我可以在构造函数中传递的选项,公平实际上意味着什么?

fair - 如果为 true,则在插入或删除时阻塞的线程的队列访问将按 FIFO 顺序处理;如果为 false,则未指定访问顺序。

据我了解,公平意味着先进先出?不是我需要的吗?例如。1个线程不应该继续访问队列?

4

3 回答 3

2

公平意味着保证 FIFO 访问。Java 7 将为任何尝试访问队列的线程创建一个队列,该队列已被锁定。

由于维护队列以进行线程排序,公平队列在使用 Array Blocking Queue 的系统上比不公平队列要慢得多。如果所有线程以非常相似的速度进行并不是非常重要,那么保持队列不公平可能是值得的。

于 2013-02-26T09:32:53.950 回答
2

FAIR 是实现一个公平的调度策略,以允许实现选择一个。公平调度听起来像是更好的选择,因为它避免了不幸的线程可能被无限期延迟的可能性,但实际上,它提供的好处很少重要到足以证明它对队列操作的巨大开销是合理的。如果未指定公平调度,ArrayBlockingQueue 通常会近似公平操作,但不能保证。

参考代码

于 2013-02-26T09:33:35.570 回答
0

根据您的问题,您可以定义什么是公平的。你可以说公平是一个线程可以访问资源的时间段。或者您可以将 fair 定义为以先进先服务方式访问资源的线程。

FIFO 在访问资源的顺序上是公平的。

于 2013-02-26T09:37:54.430 回答