JDK1.5开始加入了ConcurrentHashMap 一个ConcurrentHashMap实例中包含由若干个Segment实例组成的数组,而一个Segment实例又包含由若干个桶,每个桶中都包含一条由若干个 HashEntry 对象链接起来的链表。特别地,ConcurrentHashMap 在 ...
分类:
其他好文 时间:
2019-10-10 11:12:20
阅读次数:
73
Java基础 1、HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。 2、HaspMap扩容是怎样扩容的,为什么都是2的N次幂的大小。 3、HashMap,HashTable,ConcurrentHashMap的区别。 4、极高并发下HashTable和ConcurrentH ...
分类:
其他好文 时间:
2019-10-08 14:04:41
阅读次数:
97
1.结构 1.7 segment+HashEntity+Unsafe 1.8 移除Segment,使锁的粒度更小,Synchronized+CAS+Node+Unsafe 2. put() 1.7 先定位 Segment,再定位桶, put 全程加锁,没有获取锁的线程提前找桶的位置,并最多自旋64次 ...
分类:
其他好文 时间:
2019-09-29 22:13:19
阅读次数:
118
参考文章: ConcurrentHashMap的实现原理(JDK1.7和JDK1.8) https://youzhixueyuan.com/concurrenthashmap.html 漫画:什么是ConcurrentHashMap(JDK1.7)? https://zhuanlan.zhihu.c ...
分类:
编程语言 时间:
2019-09-21 17:12:01
阅读次数:
102
一、synchronizedMap Collections.synchronized*(m)将线程不安全集合变为线程安全集合,从源码来看由于synchronizedMap的作用就是将Map的各种方法添加了synchronized关键字进行修饰的。 二、ConcurrentHashMap Concur ...
分类:
其他好文 时间:
2019-09-21 12:41:50
阅读次数:
83
CocurrentHashMap和Hashtable都是线程安全的,key和value都不能是null,其主要区别是在于实现线程安全的方式不同。 HashTableConcurrentHashMap(JDK8之前)ConcurrentHashMap 把所有的get、put方法加上锁实现同步 把数据分 ...
分类:
其他好文 时间:
2019-09-09 09:16:06
阅读次数:
107
1 public V get(Object key) { 2 Node<K,V>[] tab; Node<K,V> e, p; int n, eh; K ek; 3 //寻址 4 int h = spread(key.hashCode()); 5 if ((tab = table) != null ... ...
分类:
编程语言 时间:
2019-09-07 13:21:10
阅读次数:
95
1 /** 2 key:键值 3 value:值 4 onlyIfAbsent:true:如果key存在的情况下,不更新值;Flase:如果key存在的情况下,替换old value 5 **/ 6 final V putVal(K key, V value, boolean onlyIfAbsen... ...
分类:
编程语言 时间:
2019-09-07 10:28:37
阅读次数:
89
ConcurrentHashMap 的初步使用及场景 CHM 的使用 ConcurrentHashMap 是 J.U.C 包里面提供的一个线程安全并且高效的 HashMap,所以 ConcurrentHashMap 在并发编程的场景中使用的频率比较高,从 ConcurrentHashMap 的使用上 ...
分类:
其他好文 时间:
2019-09-05 12:03:40
阅读次数:
94
1、基础属性 2、Segment结构 3、HashEntry结构 4、构造函数 5、put方法 6、size计算:在不加锁的情况下先后计算两次,如果两次计算的modCount一致,则认为在统计的时间内,没有其它线程对该map修改或删除,直接返回size;如果两次计算的modCount不一致,则对所有 ...
分类:
其他好文 时间:
2019-09-02 17:30:47
阅读次数:
68