java - Collections.synchronizedSortedMap 与 ConcurrentSkipListMap 用于并发使用的排序映射

标签 java collections concurrency

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

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

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

最佳答案

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

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

an iterator may be reading through the map while another thread will add new entries

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

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

关于java - Collections.synchronizedSortedMap 与 ConcurrentSkipListMap 用于并发使用的排序映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18078225/

相关文章:

java - Mybatis 将多个列映射到同一个属性

Java-ArrayList去除重复项

concurrency - F# 解决死锁

java - ConcurrentHashMap 是否会复制自身?

java - 内部类中的接口(interface)时出现编译错误

java - 如何阻止鼠标退出窗口?

java - 创建时如何将焦点设置在 JOptionPane 内的特定 JTextfield 上?

java - 如何替换java集合中的对象?

java - 没有额外空间的 O(n) 中的反转堆栈不会发生

Java - KeyListener 的线程导致并发修改。解决方案?