并发容器(二)ConcurrentHashMap |
您所在的位置:网站首页 › 飞鸟下载器使用方法 › 并发容器(二)ConcurrentHashMap |
提到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 |