1

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

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

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

4

1 回答 1

4

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

您是否需要其中一个取决于您的用例。

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

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

另一方面,ConcurrentSkipListMap 提供弱一致的迭代器(即迭代器在开始迭代之前获取地图的快照,允许您在迭代期间修改地图而不会产生副作用)。

于 2013-08-06T10:59:04.370 回答