Java公平队列

时间:2013-02-26 09:21:04

标签: java concurrency

我在看ArrayBlockingQueue

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

  

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

据我所知,公平意味着FIFO?不是我需要的?例如。 1个线程不应该继续访问队列?

3 个答案:

答案 0 :(得分:2)

  

FAIR将实施一个公平的调度策略来允许   实施选择一个。公平的时间安排听起来更好   替代方案,因为它避免了不幸的线程的可能性   可能会无限期地延迟,但在实践中,它会带来好处   提供很少重要,足以证明招致大规模   它对队列操作施加的开销。如果公平调度是   未指定,ArrayBlockingQueue通常会近似公平   操作,但没有保证。

Reference with Code

答案 1 :(得分:0)

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

由于维护了用于线程排序的队列,公平队列将比使用阵列阻塞队列的系统上的不公平队列慢得多。如果所有线程以非常相似的速率进展并不是非常重要,那么可能值得让队列保持不公平。

答案 2 :(得分:0)

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

FIFO按照访问资源的顺序是公平的。