ConcurrentHashMap简单理解
来源:互联网 发布:c语言贪吃蛇游戏代码 编辑:程序博客网 时间:2024/06/03 15:45
1、JDK6和JDK7中的实现
ConcurrentHashMap采用了分段锁的设计,只有在同一个分段内才存在竞态关系,不同的分段锁之间没有锁竞争。相比于对整个Map加锁的设计,分段锁大大的提高了高并发环境下的处理能力。但同时,由于不是对整个Map加锁,导致一些需要扫描整个Map的方法(如size(), containsValue())需要使用特殊的实现。
ConcurrentHashMap使用分段锁技术,将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问,能够实现真正的并发访问。
Segment继承了ReentrantLock,表明每个segment都可以当做一个锁。
Segment下面包含很多个HashEntry列表数组。对于一个key,需要经过三次(为什么要hash三次下文会详细讲解)hash操作,才能最终定位这个元素的位置,这三次hash分别为:
1、对于一个key,先进行一次hash操作,得到hash值h1,也即h1 = hash1(key);
2、将得到的h1的高几位进行第二次hash,得到hash值h2,也即h2 = hash2(h1高几位),通过h2能够确定该元素的放在哪个Segment;
3、将得到的h1进行第三次hash,得到hash值h3,也即h3 = hash3(h1),通过h3能够确定该元素放置在哪个HashEntry。
2、JDK8中实现
它摒弃了Segment(锁段)的概念,而是启用了一种全新的方式实现,利用CAS算法。它沿用了与它同时期的HashMap版本的思想,底层依然由“数组”+链表+红黑树的方式思想,但是为了做到并发,又增加了很多辅助的类,例如TreeBin,Traverser等对象内部类。
- ConcurrentHashMap简单理解
- ConcurrentHashmap理解
- ConcurrentHashMap理解
- ConcurrentHashMap的一点理解
- ConcurrentHashMap类的理解
- Java ConcurrentHashMap 的理解
- ConcurrentHashMap 的理解
- 深入理解ConcurrentHashMap
- 深入理解ConcurrentHashMap(1)
- 彻头彻尾理解 ConcurrentHashMap
- ConcurrentHashMap个人理解
- 深入理解ConcurrentHashMap
- ConcurrentHashMap一点理解
- ConcurrentHashMap中rehash函数理解
- ConcurrentHashMap源码理解(1.7)
- ConcurrentHashMap源码阅读与理解
- 对ConcurrentHashMap的深入理解和学习
- Map 综述(三):彻头彻尾理解 ConcurrentHashMap
- 并发多线程基本知识
- spring学习笔记---------applicationContext.xml 1
- Shadowsocks +Fanial speed上google
- Oracle存储过程语法实例
- 欢迎使用CSDN-markdown编辑器
- ConcurrentHashMap简单理解
- BZOJ 4202: 石子游戏 SG定理+LCT
- 【腾讯云的1001种玩法】专为新手小白写的服务器环境配置网站教程
- managed-schema(schema.xml)/solrconfig.xml详解
- Oracle数据库表空间迁移
- 【git使用】设置ssh key后push还要输入用户名和密码
- C++模板实现堆
- C++实现的C-词法分析器
- 第一个Java web前期工作