JUC中常用集合类简介——ConcurrentHashMap
来源:互联网 发布:飞控科技软件下载 编辑:程序博客网 时间:2024/06/11 15:49
一般我们常用的HashMap并非是线程安全的,而ConcurrentHashMap是一个高效并发的HashMap,可以理解为一个线程安全的HashMap。
要得到线程安全的HashMap,一种可行的方法是使用Collections.synchronizedMap(Map<K,V> m)来包装HashMap,如下:
Map<String,String> map = Collections.synchronizedMap(new HashMap<String,String>());
这里的产生的map就是线程安全的,其原理是相关操作通过变量mutex实现map互斥,可以把这样的map理解为加了锁(synchronized)的map,部分代码如下:
这种方式的缺陷是当并发级别比较高时,对map的操作都需要获得锁,会导致许多操作进行等待从而影响效率。
ConcurrentHashMap其实也是对操作进行加锁,不同点在于它减小了锁粒度,或称之为使用了分段锁。举个日常生活中的例子(背景是你在网上订好了一家旅店,然后拿着材料来入住,map就相当于这个旅店,你就相当于是操作map的线程):上边这家旅店(Collections.synchronizedMap)只有一个前台,所有人要登记入住都得在前台办理手续,如果只有你一个人,那么你可以马上入住,如果有一群人,那你就得等着,这样效率不高。而ConcurrentHashMap在每层都有一个前台,你根据你的楼层号(哈希值)去相应的楼层办理入住手续,这样就减少排队等待的概率及时间。
ConcurrentHashMap内部细分成若干小的map(map数组),称为段(Segment),有多个线程同时操作时,先定位相应的段,然后对该段加锁,这样如果所处的段不一样就能做到真正的并行。
最后一点就是ConcurrentHashMap是读写锁分离的,理想状态下ConcurrentHashMap支持任意线程数量的读操作。
- JUC中常用集合类简介——ConcurrentHashMap
- JUC集合-04之 ConcurrentHashMap
- Java多线程--JUC集合--ConcurrentHashMap
- JUC(四)—— ConcurrentHashMap
- JUC (一) ——集合类
- JUC源码分析15-集合-ConcurrentHashMap
- juc--ConcurrentHashMap
- Java 集合——ConcurrentHashMap
- Java多线程系列--“JUC集合”04之 ConcurrentHashMap
- Java多线程系列--“JUC集合”04之 ConcurrentHashMap
- Java多线程系列--“JUC集合”04之 ConcurrentHashMap
- java并发编程(二十二)----(JUC集合)ConcurrentHashMap介绍
- Java多线程系列--“JUC集合”04之 ConcurrentHashMap
- Java多线程系列--“JUC集合”04之 ConcurrentHashMap
- Java多线程系列--“JUC集合”04之 ConcurrentHashMap
- Java集合类总结6——ConcurrentHashMap
- 【集合类分析】ConcurrentHashMap
- 并发实战——“JUC集合”之ArrayBlockingQueue
- 反向shell与反向ssh隧道,远程控制内网机器
- SELinux 权限问题
- Android动画
- 使用android逆向助手,进行反编译apk,查看apk源码
- Android Studio 使用 git 遇到的问题
- JUC中常用集合类简介——ConcurrentHashMap
- Java IO多路复用技术详解
- hdu5135 Little Zu Chongzhi's Triangles
- 常用的makefile模版
- 题目1477:怪异的洗牌
- android_java.lang.Throwable: Explicit termination method 'end' not called
- android 简单的弹出框(在屏幕中间,传string[],根据内容框框大小自适应)
- 数据结构与算法(二)冒泡&&插入&&选择 简单排序
- poj 1753练习