HashMap、HashMap、ConcurrentHashMap

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值