ConcurrentHashMap
采用CAS和synchronized保证线程安全。
synchronized只锁定当前链表或红黑二叉树首节点,支持并发访问,修改。
put
key和value都不能为null,否则会抛出nullPointerException。
HashMap的key和value都可以为null。
map.get(key)==null有两种可能。
1,该key在Map中不存在。
2,Key在Map中存在,但是value为null。
通过map.contains(key)==true判断是那种情况。
ConcurrentHashMap为并发安全Map。
map.get(key)==null,结果为true。
map.contains(key)==true。
以上代码有两种可能。
1,map中存在key,对应的value==null。
2,map中本身不存在key,执行完get(key)后,另一个线程执行了map.put(key,‘123’);
此时原线程执行contains(key)true,原线程误认为map中存在key,且对应的valuenull。