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

Java Collections.synchronizedSortedMap vs ConcurrentSkipListMap,用于与并发一起使用的排序映射,java,collections,concurrency,Java,Collections,Concurrency,我需要使用一个将被并发访问的排序映射(迭代器可能正在读取映射,而另一个线程将添加新条目) 到目前为止,我已经找到了两种方法,一种是使用,另一种是使用 一种方法与另一种方法相比有哪些优点和缺点?ConcurrentSkipListMap似乎更易于使用,但我还应该考虑哪些其他因素 一般来说,并发集合比同步集合提供更好的可伸缩性,但同步集合允许锁定整个集合,而并发集合则不允许 您是否需要其中一个取决于您的用例 迭代器可能正在读取映射,而另一个线程将添加新条目 那么您可能不想使用Collections.

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

到目前为止,我已经找到了两种方法,一种是使用,另一种是使用


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

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

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

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

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


另一方面,ConcurrentSkipListMap提供弱一致性迭代器(即,迭代器在开始迭代之前拍摄映射快照,允许您在迭代过程中修改映射而不会产生副作用)。

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

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

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

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


另一方面,ConcurrentSkipListMap提供了弱一致性迭代器(即,迭代器在开始迭代之前对映射进行快照,允许您在迭代过程中修改映射,而不会产生副作用)。

我会选择10次中9次更容易的迭代器。还有其他因素,但CSLM对这些因素也更有利。我会选择10分之9更容易的那个。还有其他因素,但CSLM对这些因素也有好处。