对于我可以在构造函数中传递的fair
选项,它的公平性意味着什么?
fair - 如果为true,则对插入时阻塞的线程进行队列访问 删除,按FIFO顺序处理;如果为false,则访问顺序为 未指定的。
据我所知,公平意味着FIFO?不是我需要的?例如。 1个线程不应该继续访问队列?
答案 0 :(得分:2)
FAIR将实施一个公平的调度策略来允许 实施选择一个。公平的时间安排听起来更好 替代方案,因为它避免了不幸的线程的可能性 可能会无限期地延迟,但在实践中,它会带来好处 提供很少重要,足以证明招致大规模 它对队列操作施加的开销。如果公平调度是 未指定,ArrayBlockingQueue通常会近似公平 操作,但没有保证。
答案 1 :(得分:0)
公平意味着保证FIFO访问。 Java 7将为任何尝试在已经锁定时访问队列的线程创建一个队列。
由于维护了用于线程排序的队列,公平队列将比使用阵列阻塞队列的系统上的不公平队列慢得多。如果所有线程以非常相似的速率进展并不是非常重要,那么可能值得让队列保持不公平。
答案 2 :(得分:0)
根据您的问题,您可以定义什么是公平的。你可以说fair是一个线程可以访问资源的时间段。或者,您可以将fair定义为以先到先得的方式访问资源的线程。
FIFO按照访问资源的顺序是公平的。