HashMap与ConcurrentHashMap的区别与应用场景

1.HashMap与ConcurrentHashMap的区别与应用场景

从JDK1.5开始加入了ConcurrentHashMap,在面试的过程中我问过很多程序员,HashpMap与ConcurrentHashMap的区别是什么呢。我得到的回答一般都是HashpMap不是线程安全的,ConcurrentHashMap是线程安全的。这个结论很笼统。下面我来详细的举例说明他们之间的区别。

1 HashMap与ConcurrentHashMap多线程同步的误区

使用了ConcurrentHashMap就意味着多线程环境中的数据是线程同步的吗?

答案是不一定。用以下代码来作为示例来说明.

1.1 编码思路
  • 分别创建一个全局HashMap和一个全局ConcurrentHashMap
  • 分别赋予初始值。
  • 多线程修改这两个集合
  • 然后输出值,比较最终结果。
1.2 需要验证的结论
  • HashMap在多线程情况下操作不能保证数据同步。
  • ConcurrentHashMap多线程操作同样不能保证数据同步。
1.3 验证代码
  • Demo1类,验证HashMap多线程操作数据不同步.
package com.dashidan.faq;

import java.util.HashMap;
import java.util.Map;

/**
 *
 * 大屎蛋教程网-dashidan.com
 * HashMap与ConcurrentHashMap的区别于应用场景
 * Created by 大屎蛋 on 2018/5/18.
 */
public class Demo1 {
    

    public static void main(String[] args) {
    
        /** 全局HashMap*/
        HashMap<Integer, Integer> hashMap = new HashMap();
        hashMap.put(0, 0);

        /** 多线程编辑100次*/
        for (int i = 0; i < 100; i++) {
    
            new Thread(new EditThread(hashMap)).start();
        }

        /** 读取线程*/
        new Thread(new ReadThread(hashMap)).start();
        /** 输出最终结果*/
        System.out.println("Demo1 main value " + hashMap.get(0));
    }
}

class EditThread implements Runnable {
    

    Map<Integer, Integer> hashMap;

    public EditThread(Map<Integer, Integer> hashMap) {
    
       
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值