从 NullPointerException 看 ConcurrentHashMap 、HashMap 异同

DEMO

import java.util.HashMap;  
import java.util.Map;  
import java.util.concurrent.ConcurrentHashMap;  
    
public class ConcurrentHashMapTest {  
	public static void main(String[] args) {  
		Map<String, Object> hashMap = new HashMap<>();  
		  
		hashMap.put("1", 1);  
		hashMap.put("2", 2);  
		hashMap.put("3", 3);  
		hashMap.put("4", 4);  
		hashMap.put("5", null);  
		  
		final ConcurrentHashMap<Object, Object> concurrentHashMap = new ConcurrentHashMap<>();  
		  
		concurrentHashMap.putAll(hashMap);  
	}  
}

场景复现

今天重构代码,需要将 同步代码改为异步执行,所以将原来的 HashMap 改为线程安全的 ConcurrentHashMap 所以出现了这个问题;
调试的时候出现了 NullPointerException 这个异常,

方向错误

这本来是一个比较常见的异常,但是由于是重构别人的代码(不清楚 Value 可能为null 的情况),和新加了多线程的功能(对于多线程知识掌握的不扎实);所以一直以为是多线程的情况时, hashMap 变量 或 concurrentHashMap 变量会出现null 的情况;
在这里插入图片描述### 发现异常的根因
其实只需要点开被折叠的异常信息,就能发现具体哪儿抛出的异常了;是因为 ConcurrentHashMap 的 value 不能为null, hashMap 是可以的
在这里插入图片描述在这里插入图片描述

总结

1、Java 基础 ConcurrentHashMap 和 HashMap 的区别不够了解
2、对于 多线程的知识不够自信(总感觉有雷)
3、对于异常堆栈信息查看不够仔细

求甚解

为啥 ConcurrentHashMap 的 Value 不能为 null?(先挖坑)

#来时坑 #多线程 #ConcurrentHashMap

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值