GVKun编程网logo

ConcurrentHashMap 和 Collections.synchronizedMap(Map) 有什么区别?(concurrenthashmap的区别)

13

这篇文章主要围绕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的区别)

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有什么区别?

Collectors.toConcurrentMap和通过Collectors.toMap供应商选项将地图转换为ConcurrentHashMap有什么区别?

我想通过Java 8 和接口将a Map转换为ConcurrentHashMapvia ,我可以使用两个选项。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的实例源码

com.google.common.collect.Synchronized.SynchronizedBiMap的实例源码

项目:guava-mock    文件:SynchronizedBiMapTest.java   
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);
}
项目:googles-monorepo-demo    文件:SynchronizedBiMapTest.java   
public void testInverse() {
  BiMap<String,?>) inverse).mutex);
}
项目:guava-libraries    文件:SynchronizedBiMapTest.java   
public void testInverse() {
  BiMap<String,?>) inverse).mutex);
}
项目:guava    文件:SynchronizedBiMapTest.java   
public void testInverse() {
  BiMap<String,?>) inverse).mutex);
}

com.google.common.collect.Synchronized.SynchronizedCollection的实例源码

com.google.common.collect.Synchronized.SynchronizedCollection的实例源码

项目:guava-mock    文件:SynchronizedMapTest.java   
public void testValues() {
  Map<String,Integer> map = create();
  Collection<Integer> values = map.values();
  assertTrue(values instanceof SynchronizedCollection);
  assertSame(mutex,((SynchronizedCollection<?>) values).mutex);
}
项目:googles-monorepo-demo    文件:SynchronizedMapTest.java   
public void testValues() {
  Map<String,((SynchronizedCollection<?>) values).mutex);
}
项目:guava-libraries    文件:SynchronizedMapTest.java   
public void testValues() {
  Map<String,((SynchronizedCollection<?>) values).mutex);
}
项目:guava    文件:SynchronizedMapTest.java   
public void testValues() {
  Map<String,((SynchronizedCollection<?>) values).mutex);
}

com.google.common.collect.Synchronized.SynchronizedNavigableMap的实例源码

com.google.common.collect.Synchronized.SynchronizedNavigableMap的实例源码

项目:guava-mock    文件:SynchronizednavigableMapTest.java   
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);
}
项目:guava-mock    文件:SynchronizednavigableMapTest.java   
public void testHeadMap_K_B() {
  NavigableMap<String,Integer> headMap = map.headMap("a",true);
  assertTrue(headMap instanceof SynchronizednavigableMap);
  assertSame(
      mutex,Integer>) headMap).mutex);
}
项目:guava-mock    文件:SynchronizednavigableMapTest.java   
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);
}
项目:guava-mock    文件:SynchronizednavigableMapTest.java   
public void testTailMap_K_B() {
  NavigableMap<String,Integer> subMap = map.tailMap("a",true);
  assertTrue(subMap instanceof SynchronizednavigableMap);
  assertSame(
      mutex,Integer>) subMap).mutex);
}
项目:googles-monorepo-demo    文件:SynchronizednavigableMapTest.java   
public void testDescendingMap() {
  NavigableMap<String,Integer>) descendingMap).mutex);
}
项目:googles-monorepo-demo    文件:SynchronizednavigableMapTest.java   
public void testHeadMap_K_B() {
  NavigableMap<String,Integer>) headMap).mutex);
}
项目:googles-monorepo-demo    文件:SynchronizednavigableMapTest.java   
public void testSubMap_K_B_K_B() {
  NavigableMap<String,Integer>) subMap).mutex);
}
项目:googles-monorepo-demo    文件:SynchronizednavigableMapTest.java   
public void testTailMap_K_B() {
  NavigableMap<String,Integer>) subMap).mutex);
}
项目:guava-libraries    文件:SynchronizednavigableMapTest.java   
public void testDescendingMap() {
  NavigableMap<String,Integer>) descendingMap).mutex);
}
项目:guava-libraries    文件:SynchronizednavigableMapTest.java   
public void testHeadMap_K_B() {
  NavigableMap<String,Integer>) headMap).mutex);
}
项目:guava-libraries    文件:SynchronizednavigableMapTest.java   
public void testSubMap_K_B_K_B() {
  NavigableMap<String,Integer>) subMap).mutex);
}
项目:guava-libraries    文件:SynchronizednavigableMapTest.java   
public void testTailMap_K_B() {
  NavigableMap<String,Integer>) subMap).mutex);
}
项目:guava    文件:SynchronizednavigableMapTest.java   
public void testDescendingMap() {
  NavigableMap<String,Integer>) descendingMap).mutex);
}
项目:guava    文件:SynchronizednavigableMapTest.java   
public void testHeadMap_K_B() {
  NavigableMap<String,true);
  assertTrue(headMap instanceof SynchronizednavigableMap);
  assertSame(mutex,Integer>) headMap).mutex);
}
项目:guava    文件:SynchronizednavigableMapTest.java   
public void testSubMap_K_B_K_B() {
  NavigableMap<String,false);
  assertTrue(subMap instanceof SynchronizednavigableMap);
  assertSame(mutex,Integer>) subMap).mutex);
}
项目:guava    文件:SynchronizednavigableMapTest.java   
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的实例源码等相关知识,可以在本站进行查询。

本文标签: