java 并发编程之concurrentHashMap
来源:互联网 发布:linux系统密码修改 编辑:程序博客网 时间:2024/05/16 09:55
之所以会出现concurrentHashMap,是因为hashmap在实现上为了效率高,舍弃了线程安全的考虑。不像hashtable加入了synchronized的关键字来保证线程安全。但是如果在多线程环境下使用hashtable 就会导致锁竞争严重,系统的整体性能会大大降低。而concurrenthashmap采用的是锁分段技术,既保证了系统性能的高效,同时也实现了线程安全。下面我们来看下concurrenthashmap类的继承关系。
从这里看出concurrentHashMap是有segment数组结构和hashEntry数组结构构成。segment 是可重入锁ReentrantLock,在concurrentHashMap中扮演锁的角色。而HashEntry扮演存储键值的角色.
concurrentHashMap的初始化:
concurrentHashMap初始化方法是通过initialCapacity,loadFactory,concurrentlevel几个参数来初始化segments数组,段偏移量segmentShift,段掩码segmentMask和每个segment 里的HashEntry数组。
初始化segments数组。以下是源代码:
可以看到,为了能通过按位与的哈希算法来定位segment的数组大小,必须使用大于或等于concurrentlevel的2的N次方的最小数来作为数组的长度。
定位segment
concurrenthashmap采用锁分段技术来保护不同段的数据,在访问的时候需要通过哈希定位计算来获取segment的位置。通过对hashcode再hash,减少了哈希冲突的可能性。
哈希扩容
hashmap在扩容方案上采用的是先将元素插入到map中,然后判断当前
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- Java并发编程之ConcurrentHashMap
- 开发小技巧--google推荐的底部导航栏的使用BottomNavigationBar
- 如何创建Maven Webapp项目并显示src/main/java、src/main/resources、src/test/java目录
- Office 365 IT Professional——大附件管理
- linux vpn ikev2
- java中IO流巩固学习1
- java 并发编程之concurrentHashMap
- java 上传文件到Linux服务器 工具类
- linux 下vim的使用(必看)
- java实现最大公约数
- NSString 的一些笔记
- Spring MVC 简述:从MVC框架普遍关注的问题说起
- 深入浅出
- Android实现注册登录头像上传等功能常规开发(Android端,服务器端开发实例)
- linux 用户和组