繁体   English   中英

多个线程同时写入集合

[英]Multiple threads writing in a collection concurrently

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

请帮忙。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM