ConcurrentHashMap提供了和Hashtable以及SynchronizedMap中所不同的锁机制。

1,在并发方面, ConcurrentHashMap提供了好得多的并发性。多个读操作几乎总可以并发地执行,同时进行的读和写操作通常也能并发地执行,而同时进行的写操作仍然可以不时地并发进行(相关的类也提供了类似的多个读线程的并发性,但是,只允许有一个活动的写线程)。

而现有的Hashtable或者SynchronizedMap采用的锁机制是一次锁住整个hash表,从而同一时刻只能由一个线程对其进行操作;而ConcurrentHashMap中则是一次锁住一个桶。ConcurrentHashMap默认将hash表分为16个桶,诸如get,put,remove等常用操作只锁当前需要用到的桶。这样,原来只能一个线程进入,现在却能同时有16个写线程执行,并发性能的提升是显而易见的,而读操作大部分时候都不需要用到锁。只有在size()等确实需要得到整个Map的操作时才需要锁住整个hash表。

2,在迭代方面,ConcurrentHashMap使用了一种不同的迭代方式。在这种迭代方式中,当iterator被创建后集合再发生改变就不再是抛出ConcurrentModificationException,取而代之的是在改变时new新的数据从而不影响原有的数据 ,iterator完成后再将头指针替换为新的数据 ,这样iterator线程可以使用原来老的数据,而写线程也可以并发的完成改变。

转载于:https://www.cnblogs.com/wytings/p/4963553.html

Java再学习——关于ConcurrentHashMap相关推荐

  1. 从零开始的Java再学习-DAY10

    HTML5 1.概念 1.HTML全称Hyper Text Markup Language(超文本标记语言),超文本有文字,图片,动画,音频,视频等: 2.各种知名浏览器都对HTML5支持,天然跨平台 ...

  2. 深入Java集合学习系列:ConcurrentHashMap之实现细节

    http://www.iteye.com/topic/344876 ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现.在这之前我对Concurrent ...

  3. Java多线程学习二十一:ConcurrentHashMap 在 Java7 和 8 有何不同

    在 Java 8 中,对于 ConcurrentHashMap 这个常用的工具类进行了很大的升级,对比之前 Java 7 版本在诸多方面都进行了调整和变化.不过,在 Java 7 中的 Segment ...

  4. 黑马程序员__关于自己的一些学习死角的再学习(基于老毕的java基础视频)

    ----------------------<ahref="http://edu.csdn.net"target="blank">ASP.Net+A ...

  5. Java集合类学习总结

    Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾. 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java核心技术 https://blog.csdn.net/colum ...

  6. java多线程学习笔记。

    java多线程学习笔记 线程的优缺点: 多线程的好处: 充分利用多处理核心,提高资源的利用率和吞吐量. 提高接口的响应效率,异步系统工作. 线程的风险: 安全危险(竞争条件):什么坏事都没有发生.在没 ...

  7. Java深入学习并发原理总结

    Java 并发多线程基础总结 线程池 线程池的简介 线程池就是首先创建一些线程,它们的集合称为线程池.使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线 ...

  8. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  9. 初级java开发学习路线_成为初级全栈Web开发人员的10分钟路线图

    初级java开发学习路线 So you have started your journey into the world of web development. But what do you lea ...

  10. Java NIO 学习笔记(三)----Selector

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

最新文章

  1. 5分钟带你快速了解ServiceMesh的前世今生
  2. R语言Kmeans聚类、抽取聚类簇:fpc包clusterboot函数通过bootstrap重采样的方法评估Kmeans聚类的稳定性、fpc包的kmeansruns函数通过CH准则和ASW获取最优K值
  3. LabelImg操作及快捷键
  4. windbg网络双机内核调试
  5. C++ 内置或者复合类型 成员,必须自己定义构造函数来初始化……什么样的是【内置】 【复合类型】
  6. linux写文件操作同步,linux 可执行文件与写操作的同步问题(文件读写操作产生的锁机制)...
  7. SVN使用教程总结[转]
  8. 《推荐系统实践》笔记(转)
  9. 【Unity3D自学记录】Unity3D网络之Socket聊天室初探
  10. C语言实现成块数据读写操作 fread() fwrite()
  11. 光流(五)--HS光流及稠密光流
  12. 利用photoshop制作身份证复印件的流程
  13. 杭州地铁2号线西北段顺利通车 三思LED照明彰显“暖心”服务
  14. python怎么打开h5文件_python中利用h5py模块读取h5文件中的主键方法
  15. Mysql保存emoji表情
  16. 上海创蓝253董事长_从世界记忆大师到互联网百强企业CEO:创蓝253钛牛哥的传奇之路...
  17. 一个游戏创业者如何跳出模式
  18. 百度杯CTF Write up集锦 WEB篇
  19. Java程序员发展道路
  20. 数字逻辑综合工具实践-DC-07 ——综合优化(二)和RTL coding 和DFT

热门文章

  1. libmesh 思维导图(类接口设计)
  2. 好消息好消息——带计算机课程的希捷移动硬盘发货啦
  3. 算法59----打家劫舍【动态规划】
  4. vue进阶学习组件03
  5. JeeSite 工作流Activiti的应用实例
  6. python-format函数
  7. 使用Eclipse-Maven-git做Java开发(3)--Eclipse的安装和配
  8. C++字符串可以这样用!
  9. 基于Dialog的MFC程序在启动时隐藏为托盘程序(三)
  10. ubuntu下安装 Source insight