Collections.synchronizedSortedMap vs ConcurrentSkipListMap用于与并发一起使用的有序映射

时间:2013-08-06 10:55:31

标签: java collections concurrency

我需要使用将被并发访问的有序映射(迭代器可能正在读取地图,而另一个线程将添加新条目)。

到目前为止,我已经找到了两种方法:使用Collections.synchronizedSortedMap(new TreeMap())或使用ConcurrentSkipListMap

一种方法相对于另一种方法有哪些优点和缺点? ConcurrentSkipListMap似乎更容易使用,但我应该考虑其他因素?

1 个答案:

答案 0 :(得分:4)

一般来说,并发集合提供比同步集合更好的可伸缩性,但同步集合允许您锁定整个集合,而并发集合则不允许。

您是否需要其中一种取决于您的使用案例。

  

迭代器可能正在读取地图,而另一个线程将添加新条目

然后你可能不想使用Collections.synchronizedSortedMap(new TreeMap()),因为它需要在迭代时锁定整个地图。

另一方面,ConcurrentSkipListMap提供了弱一致的迭代器(即在开始迭代之前拍摄地图快照的迭代器,允许您在迭代期间修改地图而没有副作用)。