1
我有一个并发场景,在这里我必须写很多分类的数据结构。Java ConcurrentSkipListMap:自动添加另一个集合对象
我想过使用ConcurrentSkipListMap出于这个原因。我的定义是这样的:ConcurrentSkipListMap<K, List<V>>
,当插入第一个元素时,这当然会很难管理插入的List<V>
。
即:
List<V> list = map.get(k);
if (list == null) {
list = new LinkedList<V>();
map.put(list);
}
list.add(v);
当然,这不是原子。使用类putIfAbsent()
方法将使相当尴尬和低效:
List<V> newElement = new LinkedList<V>();
List<V> previous = map.putIfAbsent(k, newElement);
if (previous != null) {
previous.add(v);
} else {
newElement.add(v);
}
的一种方式,当然是创建自己的锁定和保护正常的树形图,但我有这个对象上的真正的高写入速度,我我更喜欢专门为它设计的东西。当然,python的collections.defaultdict
就是完美的。
您是否知道使用锁定或同步集合会太慢?你需要多快? (不要说尽可能快; – 2011-12-15 15:03:22
我基本上只是写入这个数据结构,concurrentskiplistmap在这个特定的方面是非常有效的,在写入时允许很好的并发性水平。在TreeMap/RBTree中,我基本上是在整个插入块中串行的。 – marcorossi 2011-12-15 15:06:18