关闭

ConcurrentHashMap源码解读

36人阅读 评论(0) 收藏 举报
分类:
首先ConcurrentHashMap不允许key和value为null。

     ConcurrentHashMap之所以可以做到高并发是因为ConcurrentHashMap内部分成了多个segment(类似于子map),只会对segment加锁,并不会整个ConcurrentHashMap 加锁。CONCURRENCY_LEVEL默认分成16个segment。可以在构造函数中指定大小。大致逻辑如下,以put为例说明。
     根据hash值 算出key所在的segment(return segments [(hash >>> segmentShift) & segmentMask],其中segmentShift =log2(CONCURRENCY_LEVEL))。获得的segment类似于一个hashMap。然后在算出segment中key的位置(int index = hash & ( tab. length - 1);)。
     性能分析:最好能够初始化时估算好ConcurrentHashMap的大小,如果一开始设置容量太小,后续容易频发发生rehash,影响性能。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:184次
    • 积分:34
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章存档