ConcurrenHashMap介绍1.8 中为什么要用红黑树
2024-09-06 05:06:48
java8不是用红黑树来管理hashmap,而是在hash值相同的情况下(且重复数量大于8),用红黑树来管理数据。 红黑树相当于排序数据。可以自动的使用二分法进行定位。性能较高。
在ConcurrentHashMap中,就是把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中:
ConcurrentHashMap中默认是把segments初始化为长度为16的数组。
根据ConcurrentHashMap.segmentFor的算法,3、4对应的Segment都是segments[1],7对应的Segment是segments[12]。
(1)Thread1和Thread2先后进入Segment.put方法时,Thread1会首先获取到锁,可以进入,而Thread2则会阻塞在锁上:
(2)切换到Thread3,也走到Segment.put方法,因为7所存储的Segment和3、4不同,因此,不会阻塞在lock():
人很聪明,真的很聪明。既然不能全锁(HashTable)又不能不锁(HashMap),所以就搞个部分锁,只锁部分,用到哪部分就锁哪部分。一个大仓库,里面有若干个隔间,每个隔间都有锁,同时只允许一个人进隔间存取东西。但是,在存取东西之前,需要有一个全局索引,告诉你要操作的资源在哪个隔间里,然后当你看到隔间空闲时,就可以进去存取,如果隔间正在占用,那你就得等着
最新文章
- Filestream读取或写入文件
- Json.Net使用JSON Schema验证JSON格式
- moto xt800 刷机到2.2.2
- 《WPF程序设计指南》读书笔记——第8章 依赖属性
- HDU 2295 Radar dancing links 重复覆盖
- 你好,C++(36)人参再好,也不能当饭吃!6.3 类是如何面向对象的
- 从Android Handler内部类到WeakReference的知识关联
- <;c>;----<;choose>;<;when>;<;otherwise>;
- Educational Codeforces Round 22.B 暴力
- day4、Linux基础题目
- 【Spark篇】---SparkStreaming+Kafka的两种模式receiver模式和Direct模式
- HTML编辑器KindEditor
- Android JNI中C调用Java方法
- Ubuntu安装最新版nodejs
- harmakik
- 【Redis】安装及简单使用
- Searching with Deep Learning 深度学习的搜索应用
- MVC 中Simditor上传本地图片
- 数据库如何从SQL server转换到SQLite
- Windows:任务调度器