HashMap、HashMap、ConcurrentHashMap

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34169802/article/details/84339240

1.HashMap

是线程不安全的,在多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。其结构如下:数组+链表结构(JDK1.8改为数组+红黑树

高并发编程系列:ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)

2.HashTable

基本与HashMap的实现原理一样,差别是:

  •  HashTable不允许key和value为null
  •  HashTable是线程安全的(get/put所有相关操作都是synchronized,相当于把整个哈希表加锁了)

3.ConcurrentHashMap

        分段的HashTable(分段锁),简单理解就是,ConcurrentHashMap 是一个 Segment 数组,Segment 通过继承 ReentrantLock 来进行加锁,所以每次需要加锁的操作锁住的是一个 segment,这样只要保证每个 Segment 是线程安全的,也就实现了全局的线程安全。

initialCapacity:初始容量(默认16,可自定义,一旦初始化后就不可以扩容),这个值指的是整个 ConcurrentHashMap 的初始容量,实际操作的时候需要平均分给每个 Segment。

loadFactor:负载因子,这个负载因子是给每个 Segment 内部使用的。

3

猜你喜欢

转载自blog.csdn.net/qq_34169802/article/details/84339240