Java再学习——关于ConcurrentHashMap
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相关推荐
- 从零开始的Java再学习-DAY10
HTML5 1.概念 1.HTML全称Hyper Text Markup Language(超文本标记语言),超文本有文字,图片,动画,音频,视频等: 2.各种知名浏览器都对HTML5支持,天然跨平台 ...
- 深入Java集合学习系列:ConcurrentHashMap之实现细节
http://www.iteye.com/topic/344876 ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现.在这之前我对Concurrent ...
- Java多线程学习二十一:ConcurrentHashMap 在 Java7 和 8 有何不同
在 Java 8 中,对于 ConcurrentHashMap 这个常用的工具类进行了很大的升级,对比之前 Java 7 版本在诸多方面都进行了调整和变化.不过,在 Java 7 中的 Segment ...
- 黑马程序员__关于自己的一些学习死角的再学习(基于老毕的java基础视频)
----------------------<ahref="http://edu.csdn.net"target="blank">ASP.Net+A ...
- Java集合类学习总结
Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾. 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java核心技术 https://blog.csdn.net/colum ...
- java多线程学习笔记。
java多线程学习笔记 线程的优缺点: 多线程的好处: 充分利用多处理核心,提高资源的利用率和吞吐量. 提高接口的响应效率,异步系统工作. 线程的风险: 安全危险(竞争条件):什么坏事都没有发生.在没 ...
- Java深入学习并发原理总结
Java 并发多线程基础总结 线程池 线程池的简介 线程池就是首先创建一些线程,它们的集合称为线程池.使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线 ...
- Java EE学习心得
–Java EE学习心得 1. 称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...
- 初级java开发学习路线_成为初级全栈Web开发人员的10分钟路线图
初级java开发学习路线 So you have started your journey into the world of web development. But what do you lea ...
- Java NIO 学习笔记(三)----Selector
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
最新文章
- 5分钟带你快速了解ServiceMesh的前世今生
- R语言Kmeans聚类、抽取聚类簇:fpc包clusterboot函数通过bootstrap重采样的方法评估Kmeans聚类的稳定性、fpc包的kmeansruns函数通过CH准则和ASW获取最优K值
- LabelImg操作及快捷键
- windbg网络双机内核调试
- C++ 内置或者复合类型 成员,必须自己定义构造函数来初始化……什么样的是【内置】 【复合类型】
- linux写文件操作同步,linux 可执行文件与写操作的同步问题(文件读写操作产生的锁机制)...
- SVN使用教程总结[转]
- 《推荐系统实践》笔记(转)
- 【Unity3D自学记录】Unity3D网络之Socket聊天室初探
- C语言实现成块数据读写操作 fread() fwrite()
- 光流(五)--HS光流及稠密光流
- 利用photoshop制作身份证复印件的流程
- 杭州地铁2号线西北段顺利通车 三思LED照明彰显“暖心”服务
- python怎么打开h5文件_python中利用h5py模块读取h5文件中的主键方法
- Mysql保存emoji表情
- 上海创蓝253董事长_从世界记忆大师到互联网百强企业CEO:创蓝253钛牛哥的传奇之路...
- 一个游戏创业者如何跳出模式
- 百度杯CTF Write up集锦 WEB篇
- Java程序员发展道路
- 数字逻辑综合工具实践-DC-07 ——综合优化(二)和RTL coding 和DFT