ConcurrentHashMap和HashTable类似,但加锁方式不同

HashTable是锁住整个map

ConcurrentHashMap的基本思想是采取分块的方式加锁,分块数由参数“concurrencyLevel”来决定(和HashMap中的“initialCapacity”类似,实际块数是第一个大于concurrencyLevel的2的n次方)。每个分块被称为Segment,Segment的索引方式和HashMap中的Entry索引方式一致(hash值对数组长度取模)。

对Segment加锁的方式很简单,直接把Segment定义为ReentrantLock的子类。

static final class Segment<K,V> extends ReentranceLock implements Seriable{}

Segmentk可以看出一个特定实现的HashTable

sieze():

  Segment里的全局变量count是一个volatile变量,在累加count操作过程中,之前累加过的count发生变化的几率非常小,所以ConcurrentHashMap的做法是先尝试2次通过不锁住Segment的方式来统计各个Segment大小,如果统计的过程中,容器的count发生了变化,则再采用加锁的方式来统计所有Segment的大小

  ConcurrentHashMap通过modCount变量判断容器是否发生变化,在put , remove和clean方法里操作元素前都会将变量modCount进行加1,那么在统计size前后比较modCount是否发生变化,从而得知容器的大小是否发生变化

转载于:https://www.cnblogs.com/zawjdbb/p/7256071.html

Concurrent实现原理相关推荐

  1. 大佬对协程以及try except的详细解释

    协程中提到的异步指的是两个函数一起运行,各个函数运行到哪里cpu会中断是不一定的. ---------------------------------------------------------- ...

  2. 网易考拉海购Java开发面经(已拿offer)

    2019独角兽企业重金招聘Python工程师标准>>> 网易的面试是在8月23日进行的,说是三面,但hr面的时候面了两次,后来得知好像是主管面,所以实际上是四次面试,两轮技术面+主管 ...

  3. linux查cpu和内存配置,Linux查看CPU和内存的配置信息

    CPU配置信息: frank@ubuntu:~/test/python$ cat /proc/cpuinfo processor : #系统中逻辑处理核的编号 vendor_id : GenuineI ...

  4. react map循环生成的button_【第1945期】彻底搞懂React源码调度原理(Concurrent模式)...

    前言 估计会懵逼.今日早读文章由成都@苏溪云投稿分享. 正文从这开始~~ 最早之前,React还没有用fiber重写,那个时候对React调度模块就有好奇.而现在的调度模块对于之前没研究过它的我来说更 ...

  5. java.util.concurrent.Exchanger应用范例与原理浅析--转载

    一.简介    Exchanger是自jdk1.5起开始提供的工具套件,一般用于两个工作线程之间交换数据.在本文中我将采取由浅入深的方式来介绍分析这个工具类.首先我们来看看官方的api文档中的叙述: ...

  6. java.util.concurrent.Exchanger应用范例与原理浅析

    http://www.cnblogs.com/davidwang456/p/4179488.html Exchanger是自jdk1.5起开始提供的工具套件,一般用于两个工作线程之间交换数据.在本文中 ...

  7. 转:AbstractQueuedSynchronizer的介绍和原理分析

    引自:http://ifeve.com/introduce-abstractqueuedsynchronizer/ 简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同 ...

  8. java.util.concurrent包API学习笔记

    newFixedThreadPool 创建一个固定大小的线程池. shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭. awaitTermination():用于等待子线程结束, ...

  9. java fork join原理_细说Fork/Join框架

    什么是Fork/Join框架? Fork/Join框架是JDK1.7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干小任务,最终汇总每个小任务结果后得到大任务结果的框架.Fork就是把一个大 ...

最新文章

  1. Anchor的泛化:统一物体检测、实例分割、姿态估计的Point-set Anchor
  2. linux系统启动流程详解
  3. javaweb:Cookie
  4. 关于文件格式和编码方式,乱码产生的原因?
  5. 1.VMware安装3个ubuntu14.05
  6. 计划学习研究模板引擎。学习stringtemplate先
  7. CSS3 经典教程系列:CSS3 圆角(border-radius)详解
  8. 深入理解Java类加载机制
  9. ACM常用之 异或运算的性质。
  10. 《刻意练习》到底讲了些什么???
  11. ubuntu修改服务器端,修改ubuntu 服务器配置
  12. 工作了五年才明白的道理,这些原来我一开始就做错了
  13. 如何断开所有SQL Server所有的连接
  14. kubernetes 查看pod在哪个node节点运行
  15. 快速对表的某字段赋递增的数值
  16. redis数据库的简单使用
  17. 数据结构 图论02 十字链表详解 代码
  18. 66个史上最全的行业数据研报网站
  19. 用c语言编程小鸭子,小鸭子
  20. 库存控制系统(inventory control system)

热门文章

  1. JMS学习(3):--ActiveMQ简单的HelloWorld实例
  2. .NET Core 以及与 .NET Framework的关系
  3. javaweb mooc在线系统案例实战-张晨光-专题视频课程
  4. symantec 操作 重叠vo_无关收购 谈谈赛门铁克的产品策略思路
  5. window下jansson安装和使用
  6. 《剑指offer》链表中环的入口节点
  7. hadoop调优之一:概述
  8. POI操作Excel常用方法总结
  9. 有向图的深度和广度遍历
  10. rest framework 序列化