【Java集合 6】Java中的ConcurrentHashMap中为什么不能存储null?

众所周知,在Java中Map可以存储null,而ConcurrentHashMap不能存储null值,那么为什么呢?

一、先出源码出发

【Java集合 6】Java中的ConcurrentHashMap中为什么不能存储null?_第1张图片
put方法点进去~
【Java集合 6】Java中的ConcurrentHashMap中为什么不能存储null?_第2张图片

@throws NullPointerException if the specified key or value is null and this map does not permit null keys or values

可以清晰的看到源码中规定,ConcurrentHashMap是不可以存储null值的。

二、那么究竟这是为什么呢?

可以先具体的了解一下ConcurrentHashMap。

与HashMap一样,ConcurrentHashMap也是一个基于散列的Map,但它使用了一种完全不同的加锁策略来提供更高的并发性和伸缩性。ConcurrentHashMap并不是将每个方法都在同一个锁上同步并使得每次只能有一个线程访问容器,而是使用一种更细的加锁机制来实现更大程度的共享,这种机制成为分段锁。在这种机制中,任意数量的读取线程可以并发地访问Map,执行读取操作的线程和执行写入操作的线程可以并发地访问Map,并且一定数量的写入线程可以并发地修改Map。ConcurrentHashMap带来的结果是,在并发访问环境下将实

你可能感兴趣的:(49天精通Java从入门到就业,java,开发语言)