这篇文章主要围绕ConcurrentHashMap和Collections.synchronizedMap(Map)有什么区别?和concurrenthashmap的区别展开,旨在为您提供一份详细的参
这篇文章主要围绕ConcurrentHashMap 和 Collections.synchronizedMap(Map) 有什么区别?和concurrenthashmap的区别展开,旨在为您提供一份详细的参考资料。我们将全面介绍ConcurrentHashMap 和 Collections.synchronizedMap(Map) 有什么区别?的优缺点,解答concurrenthashmap的区别的相关问题,同时也会为您带来Collectors.toConcurrentMap和通过Collectors.toMap供应商选项将地图转换为ConcurrentHashMap有什么区别?、com.google.common.collect.Synchronized.SynchronizedBiMap的实例源码、com.google.common.collect.Synchronized.SynchronizedCollection的实例源码、com.google.common.collect.Synchronized.SynchronizedNavigableMap的实例源码的实用方法。
本文目录一览:- ConcurrentHashMap 和 Collections.synchronizedMap(Map) 有什么区别?(concurrenthashmap的区别)
- Collectors.toConcurrentMap和通过Collectors.toMap供应商选项将地图转换为ConcurrentHashMap有什么区别?
- com.google.common.collect.Synchronized.SynchronizedBiMap的实例源码
- com.google.common.collect.Synchronized.SynchronizedCollection的实例源码
- com.google.common.collect.Synchronized.SynchronizedNavigableMap的实例源码
ConcurrentHashMap 和 Collections.synchronizedMap(Map) 有什么区别?(concurrenthashmap的区别)
我有一个 Map 将由多个线程同时修改。
Java API 中似乎存在三种不同的同步 Map 实现:
Hashtable
Collections.synchronizedMap(Map)
ConcurrentHashMap
据我了解,Hashtable
是一个旧的实现(扩展过时的Dictionary
类),后来经过调整以适应Map
接口。虽然它 是
同步的,但它似乎存在严重的可伸缩性问题,并且不鼓励用于新项目。
但是另外两个呢?Collections.synchronizedMap(Map)
和s返回的Maps有什么区别ConcurrentHashMap
?哪一种适合哪一种情况?
答案1
小编典典根据您的需要,使用ConcurrentHashMap
. 它允许从多个线程同时修改 Map
而无需阻塞它们。Collections.synchronizedMap(map)
创建一个会降低性能的阻塞 Map,尽管可以确保一致性(如果使用得当)。
如果您需要确保数据一致性,请使用第二个选项,并且每个线程都需要拥有最新的地图视图。如果性能很关键,则使用第一个,并且每个线程只将数据插入到映射中,读取发生的频率较低。
Collectors.toConcurrentMap和通过Collectors.toMap供应商选项将地图转换为ConcurrentHashMap有什么区别?
我想通过Java 8 和接口将a Map
转换为ConcurrentHashMap
via ,我可以使用两个选项。Stream``Collector
首先:
Map<Integer,String> mb = persons.stream()
.collect(Collectors.toMap(
p -> p.age,p -> p.name,(name1,name2) -> name1+";"+name2,ConcurrentHashMap::new));
第二个:
Map<Integer,String> mb1 = persons.stream()
.collect(Collectors.toConcurrentMap(
p -> p.age,p -> p.name));
哪个是更好的选择?什么时候应该使用每个选项?
com.google.common.collect.Synchronized.SynchronizedBiMap的实例源码
public void testInverse() { BiMap<String,Integer> bimap = create(); BiMap<Integer,String> inverse = bimap.inverse(); assertSame(bimap,inverse.inverse()); assertTrue(inverse instanceof SynchronizedBiMap); assertSame(mutex,((SynchronizedBiMap<?,?>) inverse).mutex); }
public void testInverse() { BiMap<String,?>) inverse).mutex); }
public void testInverse() { BiMap<String,?>) inverse).mutex); }
public void testInverse() { BiMap<String,?>) inverse).mutex); }
com.google.common.collect.Synchronized.SynchronizedCollection的实例源码
public void testValues() { Map<String,Integer> map = create(); Collection<Integer> values = map.values(); assertTrue(values instanceof SynchronizedCollection); assertSame(mutex,((SynchronizedCollection<?>) values).mutex); }
public void testValues() { Map<String,((SynchronizedCollection<?>) values).mutex); }
public void testValues() { Map<String,((SynchronizedCollection<?>) values).mutex); }
public void testValues() { Map<String,((SynchronizedCollection<?>) values).mutex); }
com.google.common.collect.Synchronized.SynchronizedNavigableMap的实例源码
public void testDescendingMap() { NavigableMap<String,Integer> map = create(); NavigableMap<String,Integer> descendingMap = map.descendingMap(); assertTrue(descendingMap instanceof SynchronizednavigableMap); assertSame(mutex,((SynchronizednavigableMap<String,Integer>) descendingMap).mutex); }
public void testHeadMap_K_B() { NavigableMap<String,Integer> headMap = map.headMap("a",true); assertTrue(headMap instanceof SynchronizednavigableMap); assertSame( mutex,Integer>) headMap).mutex); }
public void testSubMap_K_B_K_B() { NavigableMap<String,Integer> subMap = map.subMap("a",true,"b",false); assertTrue(subMap instanceof SynchronizednavigableMap); assertSame( mutex,Integer>) subMap).mutex); }
public void testTailMap_K_B() { NavigableMap<String,Integer> subMap = map.tailMap("a",true); assertTrue(subMap instanceof SynchronizednavigableMap); assertSame( mutex,Integer>) subMap).mutex); }
public void testDescendingMap() { NavigableMap<String,Integer>) descendingMap).mutex); }
public void testHeadMap_K_B() { NavigableMap<String,Integer>) headMap).mutex); }
public void testSubMap_K_B_K_B() { NavigableMap<String,Integer>) subMap).mutex); }
public void testTailMap_K_B() { NavigableMap<String,Integer>) subMap).mutex); }
public void testDescendingMap() { NavigableMap<String,Integer>) descendingMap).mutex); }
public void testHeadMap_K_B() { NavigableMap<String,Integer>) headMap).mutex); }
public void testSubMap_K_B_K_B() { NavigableMap<String,Integer>) subMap).mutex); }
public void testTailMap_K_B() { NavigableMap<String,Integer>) subMap).mutex); }
public void testDescendingMap() { NavigableMap<String,Integer>) descendingMap).mutex); }
public void testHeadMap_K_B() { NavigableMap<String,true); assertTrue(headMap instanceof SynchronizednavigableMap); assertSame(mutex,Integer>) headMap).mutex); }
public void testSubMap_K_B_K_B() { NavigableMap<String,false); assertTrue(subMap instanceof SynchronizednavigableMap); assertSame(mutex,Integer>) subMap).mutex); }
public void testTailMap_K_B() { NavigableMap<String,true); assertTrue(subMap instanceof SynchronizednavigableMap); assertSame(mutex,Integer>) subMap).mutex); }
今天关于ConcurrentHashMap 和 Collections.synchronizedMap(Map) 有什么区别?和concurrenthashmap的区别的分享就到这里,希望大家有所收获,若想了解更多关于Collectors.toConcurrentMap和通过Collectors.toMap供应商选项将地图转换为ConcurrentHashMap有什么区别?、com.google.common.collect.Synchronized.SynchronizedBiMap的实例源码、com.google.common.collect.Synchronized.SynchronizedCollection的实例源码、com.google.common.collect.Synchronized.SynchronizedNavigableMap的实例源码等相关知识,可以在本站进行查询。
本文标签: