hashMap和hashTable和ConcurrentHashMap区别

HashMap非线程安全,多线程可能导致死循环;HashTable是线程安全的,但性能较低;ConcurrentHashMap在JDK1.7使用分段锁提高并发性,在JDK1.8中改为对每个元素加锁,利用CAS和synchronized实现线程安全并优化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hashMap

线程不安全,在多线程情况下会造成链表死循环

hashTable

线程安全,性能低,内部通过给方法加synchronized 关键字,来解决线程安全的

ConcurrentHashMap

线程安全,性能高,内部采用synchronized+CAS机制实现分段锁来解决线程安全,具体为:

jdk1.7,将底层数组分为多个segment(部分),每个segment都有一把锁,这样就提高了并发量(每个segment都包含若干个hashEntry),使用Lock锁

jdk1.8取消了segment,直接将每个hashEntry加锁,利用synchronized+CAS进行锁定,当有元素put时,现根据key计算hash值,如果该位置没有元素,则用CAS机制进行插入,如有有元素,看数组是否在扩容,在扩容的话,该线程帮助扩容,如果没有在扩容或扩容完毕,则用synchronized加锁进行put

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值