用于快速并发插入的最佳Java数据结构

时间:2016-01-26 15:47:46

标签: java multithreading performance data-structures concurrency

我的用例如下:我有10个线程同时写入一个数据结构。数据结构中元素的顺序无关紧要。所有元素都是独一无二的。我只会在最后一次从这个数据结构中读取一次。

什么是最适合此目的的原生Java数据结构?从我的阅读来看,似乎Collections.synchronizedList可能是选择吗?

2 个答案:

答案 0 :(得分:3)

您无需在列表上进行同步,因为每个线程都可以在其本地副本上工作,最后可以将所有线程的结果连接到最终列表中。

如果要使用JDK7及更高版本,那么我将使用fork和join,我会在每个分叉任务中创建简单List,最后在连接阶段的最后一个主列表中加入它

如果我在JDK6上,那么我可以使用计数为10的CountDownLatch。写入各自列表后的每个线程(从主控制器线程传递到线程)倒计时锁定和主要控制器,一旦完成所有线程,我会将所有结果合并为一个。

答案 1 :(得分:3)

  

我有10个线程同时写入一个数据结构。

我认为每个线程最好使用单独的数据结构。这样,线程之间就不需要同步了,而且CPU缓存也会更友好。

最后他们可以加入。

对于底层结构:如果元素是固定大小,则数组/ verctor最好。加入它们只会占用它们占用的内存块的副本,具体取决于实现 - 但列表总是会更慢。