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); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。