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),所以就搞个部分锁,只锁部分,用到哪部分就锁哪部分。一个大仓库,里面有若干个隔间,每个隔间都有锁,同时只允许一个人进隔间存取东西。但是,在存取东西之前,需要有一个全局索引,告诉你要操作的资源在哪个隔间里,然后当你看到隔间空闲时,就可以进去存取,如果隔间正在占用,那你就得等着

最新文章

  1. Filestream读取或写入文件
  2. Json.Net使用JSON Schema验证JSON格式
  3. moto xt800 刷机到2.2.2
  4. 《WPF程序设计指南》读书笔记——第8章 依赖属性
  5. HDU 2295 Radar dancing links 重复覆盖
  6. 你好,C++(36)人参再好,也不能当饭吃!6.3 类是如何面向对象的
  7. 从Android Handler内部类到WeakReference的知识关联
  8. <c>----<choose><when><otherwise>
  9. Educational Codeforces Round 22.B 暴力
  10. day4、Linux基础题目
  11. 【Spark篇】---SparkStreaming+Kafka的两种模式receiver模式和Direct模式
  12. HTML编辑器KindEditor
  13. Android JNI中C调用Java方法
  14. Ubuntu安装最新版nodejs
  15. harmakik
  16. 【Redis】安装及简单使用
  17. Searching with Deep Learning 深度学习的搜索应用
  18. MVC 中Simditor上传本地图片
  19. 数据库如何从SQL server转换到SQLite
  20. Windows:任务调度器

热门文章

  1. stat - 打印信息节点(inode)内容
  2. dubbo-源码阅读之容器启动
  3. POJ-1155 TELE 树形背包dp
  4. Codeforces 1169E DP
  5. nodejs 模板引擎jade的简单使用(2)
  6. 历史上最详细的SpringCloud搭建微服务的过程。(包括注册中心,服务提供者和服务消费者)
  7. 前端避免XSS(跨站脚本攻击)
  8. Vue学习笔记【3】——Vue指令之v-bind的三种用法
  9. CSS格式化---属性排序
  10. RabbitMQ-----的基本安装