Java 多个线程同时在集合中写入

Java 多个线程同时在集合中写入,java,collections,java.util.concurrent,Java,Collections,Java.util.concurrent,我有一个场景,在这个场景中,很多线程需要共享一个集合,并且线程继续在集合中写入,相对而言,写入很多,读取很少,我不确定ArrayBlockQueue是否是要使用的正确集合。 我应该实现自己的集合,还是从Java中获得任何现成的东西 请帮助。我建议您先阅读和的代码。如果你认为你可以做得更好,你可以自己写,但很可能自己写的不会有那么好的性能,也不会经过很好的测试。一般来说,坚持“单一编写器原则”的系统可以获得更好的性能。并发集合确实支持多个写入程序,但是如果您让每个线程写入它们自己的集合,并且读卡器

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


请帮助。

我建议您先阅读和的代码。如果你认为你可以做得更好,你可以自己写,但很可能自己写的不会有那么好的性能,也不会经过很好的测试。

一般来说,坚持“单一编写器原则”的系统可以获得更好的性能。并发集合确实支持多个写入程序,但是如果您让每个线程写入它们自己的集合,并且读卡器遍历每个集合,那么您可能会获得更少的争用和更好的吞吐量。

这取决于您如何查找“集合”

ArrayBlockingQueue顾名思义是一个阻塞队列。如果您只是希望一个集合存储并读取一组数据,而不使用那些阻塞的put/take操作,那么ArrayBlockingQueue可能与同步的ArrayList没有什么不同。再次思考您使用该系列的目的


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

是的,请使用现成的解决方案。