ConCurrentHashMap的底层是:散列表+红黑树,与HashMap是一样的。(不允许key和value是null值)

  • JDK1.8底层是散列表+红黑树
  • ConCurrentHashMap支持高并发的访问和更新,它是线程安全
  • 检索操作不用加锁,get方法是非阻塞的
  • key和value都不允许为null
  • 有了Hashtable为啥需要ConCurrentHashMap

    • Hashtable是在每个方法上都加上了Synchronized完成同步,效率低下。
    • ConcurrentHashMap通过在部分加锁利用CAS算法来实现同步。
    • CAS算法和volatile简单介绍

      在看ConCurrentHashMap源码之前,我们来简单讲讲CAS算法和volatile关键字

      CAS(比较与交换,Compare and swap) 是一种有名的无锁算法

      CAS有3个操作数

      • 内存值V
      • 旧的预期值A
      • 要修改的新值B

      当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做

      • 当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值(A和内存值V相同时,将内存值V修改为B),而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试(否则什么都不做)

      看了上面的描述应该就很容易理解了,先比较是否相等,如果相等则替换(CAS算法)

    • volatile经典总结:volatile仅仅用来保证该变量对所有线程的可见性,但不保证原子性
  • 小结:
    • 底层结构是散列表(数组+链表)+红黑树,这一点和HashMap是一样的。
    • Hashtable是将所有的方法进行同步,效率低下。而ConcurrentHashMap作为一个高并发的容器,它是通过部分锁定+CAS算法来进行实现线程安全的。CAS算法也可以认为是乐观锁的一种~
    • 在高并发环境下,统计数据(计算size...等等)其实是无意义的,因为在下一时刻size值就变化了。
    • get方法是非阻塞,无锁的。重写Node类,通过volatile修饰next来实现每次获取都是最新设置的值
    • ConcurrentHashMap的key和Value都不能为null
    • 详解参考:https://blog.csdn.net/u010723709/article/details/48007881

最新文章

  1. json简单使用
  2. css中各种情况下的元素的垂直和水平居中的问题
  3. 修改BIND9实现TCP DNS
  4. yii2 rbac权限控制详细操作步骤
  5. Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tool
  6. VS2015 企业版不支持 JavaScript 语法高亮、智能提醒
  7. 二叉排序树(BST)构造与应用
  8. Windows 2012安装odoo12
  9. [Swift]LeetCode599. 两个列表的最小索引总和 | Minimum Index Sum of Two Lists
  10. 转载:如何优雅的实现INotifyPropertyChanged接口
  11. vue mand-mobile ui加class不起作用的问题 css权重问题
  12. linux文本格式转换
  13. Linux /etc/profile文件详解
  14. nginx 读取文件 permission denied
  15. Android学习之Gallery
  16. PHP面向对象__set(赋值方法)
  17. size_t详细解释
  18. 【权值分块】bzoj3570 DZY Loves Physics I
  19. poj_1284_原根
  20. Log4j介绍,log4j.properties配置详解

热门文章

  1. P2050 [NOI2012]美食节 动态连边优化费用流
  2. Codeforces Round #486 (Div. 3)988D. Points and Powers of Two
  3. css绝对定位
  4. 仿QQ5.0侧滑菜单
  5. iOS面试题整理带答案
  6. Java第二次作业第四题
  7. MySQL索引&&开发规范
  8. 手把手教你使用Java实现一个神经网络
  9. RocksDB线程局部缓存
  10. 生成式学习算法(三)之----高斯判别分析模型(Gaussian Discriminant Analysis ,GDA)