栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

concurrentHashMap1.7和concurrentHashMap1.8区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

concurrentHashMap1.7和concurrentHashMap1.8区别

底层

1.7底层是由ReentrantLock+Segment(锁,内部也维护了一个Entry数组)+HashEntry数组实现的,锁的颗粒度为Segment

1.8底层是由Node数组 + 链表+ 红黑树,并发操作使用的是Synchronized和CAS来控制,锁的颗粒度为HashEntry

PUT方法

1.7会进行两次定位,先进行Segment定位再对其内部的Entry数组进行定位,定位后使用自旋锁进行加锁当自旋64次时进行膨胀,膨胀后线程进入阻塞状态,等待唤醒。整个put时都持有锁

1.8只需要进行一次定位,使用synchronized+CAS机制,如对应下标没有节点,说明没有hash碰撞,使用cas进行插入,若成功则返回成功,失败则通过synchronized进行加锁

size计算方式

1.7先不加锁进行统计,最多统计三次,当前后两次值一样则返回,不一样则对每一个Segment进行加锁统计

1.8会维护一个baseCount属性,每次put后会通过cas进行对baseCount自增

红黑树

使用红黑树降低了哈希冲突的时间复杂度

CAS

当多个线程更新同一个变量是,若内存值等于预期值则更新为新值,若不等于会告知线程修改值失败不会挂起,但是可以重试

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976177.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号