Java中Collections.synchronizedMap()和ConcurrentHashMap有什么区别呢?

戚薇 Java经验 发布时间:2023-05-24 15:55:14 阅读数:11914 1
下文笔者讲述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);
	}
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202305/16849149426613.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者