Java中Collections.synchronizedMap()和ConcurrentHashMap有什么区别呢?
下文笔者讲述Collections.synchronizedMap()和ConcurrentHashMap的区别说明,如下所示
Collections.synchronizedMap()和ConcurrentHashMap区别
区别1:锁的位置不同
Collections.synchronizedMap()与ConcurrentHashMap区别是:
Collections.synchronizedMap()和Hashtable一样
在调用map所有方法时,对整个map进行同步
ConcurrentHashMap的实现却更加精细,它对map中的所有桶加了锁
所以只要要有一个线程访问map,其他线程就无法进入map
如果一个线程在访问ConcurrentHashMap某个桶时,其他线程,仍然可以对map执行某些操作
即:
ConcurrentHashMap在性能以及安全性方面比Collections.synchronizedMap()更加有优势
同时,同步操作精确控制到桶
即在遍历map时,其他线程试图对map进行数据修改,也不会抛出ConcurrentModificationException
区别2:
ConcurrentHashMap只是HashMap
Collections.synchronizedMap()可接收任意Map实例
例:Collections.synchronizedMap()和ConcurrentHashMap示例
package com.java265;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
public class MapTest4 {
private static void writeMap(Map<String, Object> map) {
for (int i = 0; i < 10; i++) {
map.put("key" + i, "value" + i);
}
}
private static void printMap(Map<String, Object> map) {
for (Map.Entry<String, Object> entry : map.entrySet()) {
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
}
}
public static void main(String[] args) {
Map<String, Object> map1 = new HashMap<String, Object>();
writeMap(map1);
printMap(map1);
System.out.println();
Map<String, Object> map2 = Collections.synchronizedMap(new TreeMap<String, Object>());
writeMap(map2);
printMap(map2);
System.out.println();
Map<String, Object> map3 = new ConcurrentHashMap<String, Object>();
writeMap(map3);
printMap(map3);
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


