多个线程同时写入集合

时间:2013-06-25 06:33:34

标签: java collections java.util.concurrent

我有一个场景,其中许多线程需要共享集合并且线程继续在集合中写入,相对写入很多并且读取非常少,我不确定ArrayBlockQueue是否是正确的集合用过的。 我应该实现自己的集合还是从Java中获取任何东西?

请帮忙。

3 个答案:

答案 0 :(得分:1)

我建议您先阅读ArrayBlockingQueueDisruptor的代码。如果您认为自己可以做得更好,那么您可以自己编写,但编写自己的文章很可能不会具有高效性或经过充分测试。

答案 1 :(得分:1)

通常,遵循“单一作者原则”的系统可以获得更好的性能。并发集合确实支持多个编写器,但如果相反,您让每个线程都写入自己的集合,并且读者遍历每个集合,您可能会获得更少的争用和更好的吞吐量。

答案 2 :(得分:1)

这取决于你对“收藏”的看法。

建议使用ArrayBlockingQueue作为阻塞队列。如果您只是想要一个集合来存储大量数据并读取它,而不使用那些阻塞put / take操作,ArrayBlockingQueue可能与同步的ArrayList没什么不同。再想想你使用该集合的内容。

Java提供了一些无锁的集合,比如ConcurrentLinkedQueue。如果您不是在寻找BlockingQueue,这些系列可能会为您提供更好的性能。