并发容器(二)ConcurrentHashMap

您所在的位置:网站首页 飞鸟下载器使用方法 并发容器(二)ConcurrentHashMap

并发容器(二)ConcurrentHashMap

#并发容器(二)ConcurrentHashMap| 来源: 网络整理| 查看: 265

提到ConcurrentHashMap都能想到啥?

我能想到1.7和1.8版本的ConcurrentHashMap的实现不一样:

在JDK1.7之前,ConcurrentHashMap使用了Segments数组+HashEntry数组+链表的方式实现

这里有个很重要的思想:分段锁的思想

在JDK1.8之前,ConcurrentHashMap使用了自旋+cas+synchronized关键字,在哈希冲突的时候,数组的数量大于64,链表的数量大于8的时候转换成红黑树的结构,不过这个是千万万分之六的概率,也就是说转换成红黑树的概率是很小的。

ConcurrentHashMap中有一个很重要的方法:putIfAbsent

public static void main(String[] args) { ConcurrentHashMap concurrentHashMap = new ConcurrentHashMap(); Integer count = concurrentHashMap.putIfAbsent("count", 10); System.out.println(count); // count为空 count = concurrentHashMap.putIfAbsent("count", 20); System.out.println(count); // count1依然为10 count = concurrentHashMap.putIfAbsent("count", 30); System.out.println(count); // count1依然为10 System.out.println(concurrentHashMap);//{count=10} }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3