在putVal方法执行完成以后,会通过addCount来增加ConcurrentHashMap中的元素个数,并且还会可能触发扩容操作。这里会有两个非常经典的设计

1. 高并发下的扩容

2. 如何保证addCount的数据安全性以及性能

//将当前ConcurrentHashMap的元素数量加1,有可能触发transfer操作(扩容)
addCount(1L, binCount);
return null; 

ConcurrentHashMap的源码分析-put方法第二阶段相关推荐

  1. ConcurrentHashMap的源码分析-put方法第四阶段

    这个方法的主要作用是,如果被添加的节点的位置已经存在节点的时候,需要以链表的方式加入到节点中 如果当前节点已经是一颗红黑树,那么就会按照红黑树的规则将当前节点加入到红黑树中 else { //进入到这 ...

  2. ConcurrentHashMap的源码分析-put方法第三阶段

    如果对应的节点存在,判断这个节点的hash是不是等于MOVED(-1),说明当前节点是ForwardingNode节点,意味着有其他线程正在进行扩容,那么当前现在直接帮助它进行扩容,因此调用helpT ...

  3. ConcurrentHashMap的源码分析-put方法第四个阶段

    判断链表的长度是否已经达到临界值8. 如果达到了临界值,这个时候会根据当前数组的长度来决定是扩容还是将链表转化为红黑树.也就是说如果当前数组的长度小于64,就会先扩容.否则,会把当前链表转化为红黑树 ...

  4. HashMap与ConcurrentHashMap万字源码分析

    HashMap与ConcurrentHashMap`源码解析 JDK版本:1.7 & 1.8 ​ 开发中常见的数据结构有三种: 1.数组结构:存储区间连续.内存占用严重.空间复杂度大 优点:因 ...

  5. ConcurrentHashMap的源码分析-transfer

    扩容是ConcurrentHashMap的精华之一,扩容操作的核心在于数据的转移,在单线程环境下数据的转移很简单,无非就是把旧数组中的数据迁移到新的数组.但是这在多线程环境下,在扩容的时候其他线程也可 ...

  6. ConcurrentHashMap的源码分析-JDK1.7和Jdk1.8版本的变化

    ConcurrentHashMap和HashMap的实现原理是差不多的,但是因为ConcurrentHashMap需要支持并发操作,所以在实现上要比hashmap稍微复杂一些. 在JDK1.7的实现上 ...

  7. mybatis源码分析(方法调用过程)

    十一月月底,宿舍楼失火啦,搞得20多天没有网,目测直到放假也不会来了... 正题 嗯~,其实阅读源码不是为了应付面试,更重要的让你知道,大师是怎样去写代码的,同样是用Java,为啥Clinton Be ...

  8. [集合]ConcurrentHashMap的源码分析

    前言: 强推:一文读懂HashMap 这感觉讲的HashMap很明白. 1. 多线程环境下面,HashMap和Hashtable会怎么样? 1.1 HashMap 因为put会调用: // 新增Ent ...

  9. ConcurrentHashMap的源码分析-CounterCells解释

    ConcurrentHashMap是采用CounterCell数组来记录元素个数的,像一般的集合记录集合大小,直接定义一个size的成员变量即可,当出现改变的时候只要更新这个变量就行.为什么Concu ...

最新文章

  1. win7下搭建nginx+php的开发环境
  2. 在WordPress中添加简书风格的连载目录和文章导航
  3. 程序人生:给所有程序员的27个建议,抽空看看吧!
  4. 将10000H-1000FH这段空间当做栈,初始状态栈是空的,设置AX=001AH,BX=001BH,利用栈,交换AX和BX的数据
  5. Spring Boot笔记-对dto数据传输对象及物联网公司主创建主键的认识
  6. [Luogu] 软件包管理器
  7. Source Insight 4.0 常用设置
  8. Android NDK开发之 NEON 矩阵转置,矩阵乘法实现
  9. SVN客户端和中文包的安装
  10. VC++ 屏幕捕获(DXGI)
  11. homelede软路由设置方法_软路由LEDE折腾overlay分区扩容之路
  12. 华为服务器安装操作系统
  13. OutMan——面向对象的三大特性、对象和对象之间的关系以及动态类型检测方法
  14. 大表哥有个项目,10W预算,让我顺手做了算了......
  15. PHP slideup,jQuery.slideUp() 函数使用详解
  16. Prometheus告警功能——对接邮箱
  17. 电脑使用越来越慢,如何解决
  18. Python基础学习之字典(自用)—henu.hjy
  19. java基础巩固-宇宙第一AiYWM:为了维持生计,多高(多线程与高并发)_Part7~整起(打手集团【线程池】)
  20. 3a企业认证的条件和优势

热门文章

  1. python logging模块使用总结
  2. go语言学习(基本数据类型)
  3. 线程阻塞和挂起(网络收集)
  4. 如何做简单的访客统计JQ+PHP
  5. [0715]Jsoi Test elevator
  6. .net中javascript去调用webservice
  7. 在Visual Studio 2005中安装Qt 4.3.2
  8. javascript 基础下
  9. Addin and Automation Development In VB.NET 2003 (3)
  10. 大话设计模式—观察者模式