首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个线程并发地在集合中写入

问多个线程并发地在集合中写入
EN

Stack Overflow用户
提问于 2013-06-25 14:33:34
回答 3查看 928关注 0票数 1

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

请帮帮忙。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-25 14:40:25

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

票数 1
EN

Stack Overflow用户

发布于 2013-06-25 14:48:19

一般来说,坚持“单一写入器原则”的系统可以获得更好的性能。并发集合确实支持多个写入器,但如果让每个线程写入自己的集合,而读取器遍历每个集合,则可能会减少争用并提高吞吐量。

票数 1
EN

Stack Overflow用户

发布于 2013-06-25 15:22:37

这取决于你寻找什么“集合”。

顾名思义,ArrayBlockingQueue是一个阻塞队列。如果您只是想让一个集合存储大量数据并读取它,而不使用那些阻塞的put/take操作,那么ArrayBlockingQueue可能与同步的ArrayList没有什么不同。再想一想你用这个集合做什么。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17290619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档