我有一个场景,在这个场景中,很多线程需要共享一个集合,而这些线程继续在集合中写入,相对而言,写入很多,读取非常少,我不确定ArrayBlockQueue是否是一个正确的集合。我应该实现自己的集合,还是应该在Java中获得任何开箱即用的东西?
请帮帮忙。
发布于 2013-06-25 14:40:25
我建议您先阅读ArrayBlockingQueue和Disruptor的代码。如果你认为你可以做得更好,你可以自己写,但很可能你自己写的不会有那么好的性能,也不会有很好的测试。
发布于 2013-06-25 14:48:19
一般来说,坚持“单一写入器原则”的系统可以获得更好的性能。并发集合确实支持多个写入器,但如果让每个线程写入自己的集合,而读取器遍历每个集合,则可能会减少争用并提高吞吐量。
发布于 2013-06-25 15:22:37
这取决于你寻找什么“集合”。
顾名思义,ArrayBlockingQueue是一个阻塞队列。如果您只是想让一个集合存储大量数据并读取它,而不使用那些阻塞的put/take操作,那么ArrayBlockingQueue可能与同步的ArrayList没有什么不同。再想一想你用这个集合做什么。
Java提供了一些无锁的集合,比如ConcurrentLinkedQueue。如果您不是在寻找BlockingQueue,这些集合可能会为您提供更好的性能。
https://stackoverflow.com/questions/17290619
复制相似问题