【发布时间】:2013-08-30 08:09:27
【问题描述】:
我有一种情况,多个线程将通过调用take() 轮询单个BlockingQueue。我想知道的是:
如果多个线程正在等待队列接收一个项目,它们是否会按照它们调用take() 的顺序优先从队列中取出项目,或者线程将其取出的顺序是什么?队列是任意的?
谢谢!
注意:过去我已经为这种事情编写了自己的实现,但我想知道 Java 中的 BlockingQueue 实现是否会为我做这件事。
【问题讨论】:
-
一般来说,任何多线程应用程序都不应该对线程执行的顺序做任何假设。有一些方法可以强制执行,但 MT 应用程序背后的想法是不应该这样做。
-
有趣的问题,我已经编写并运行了一个程序 - 没有固定的顺序。
-
Related question 也讨论了公平性。
标签: java multithreading queue