Java,补充迭代器或队列

时间:2014-04-30 22:19:35

标签: java multithreading

我正在开发涉及多个线程的项目。我有一个管理器类,其中包含我的线程用于计算的模型列表等。这是一个包含几个项目的基本同步数组列表。现在我希望我的每个线程都采用不同的项目,一个当前未被使用的项目,类似于队列。使用foreach是不可能的,因为我有更多的项目而不是线程。 1:20的比例。使用队列也是可能的,但我希望它能够补充,我不知道这是否是最佳方式。

我的问题是:我该如何解决这个问题。有些人已经建议使用同步迭代器,但这不适用于多个线程...

编辑:项目不会改变。我只是不希望线程同时使用同一个项目。

2 个答案:

答案 0 :(得分:2)

听起来像ConcurrentLinkedQueue就是你要找的东西。多个线程可以安全地添加和删除,并且您不需要迭代它,您只需轮询队列的头部以获取新项目,并且可以将(提供)新项目放入队列中。这与@AdrianPang所描述的BlockingQueue略有不同,因为如果队列中没有任何内容,此处的线程将立即返回(使用null)。您需要的确切集合取决于您想要的行为,但在这里使用一种或另一种类型的并发队列似乎是合适的。

答案 1 :(得分:0)

你所描述的内容听起来像BlockingQueue的用例你的线程将在队列上调用take()(并阻塞直到一个可用)并且你的主线程可以提供模型对象(通过调用offer)< / p>