ConcurrentHashMap
存储结构
存储结构同HashMap。
如何保证线程安全
1.put流程
a.ConcurrentHashMap中存储Node节点的数组是volital类型的,保证了多线程下这个数组的可见性,也就是说保证了多个线程访问不会读到脏数据。
b.插入第一个元素时候,会先初始化数组,初始化的时候用到了DCL和CAS的方式保证了只会有一个线程去执行初始化操作,失败的线程会yield,执行后续插入操作。
c.检查当前槽位是否已经有元素,如果没有,用CAS的方式插入,插入成功返回。
d.插入失败,判断当前位置数据是否正在扩容,如果是则执行扩容方法,帮助扩容。
e.如果以上条件都不满足,则使用synchronized锁住当前桶位置,执行插入,保证当前只会有一个线程添加到链表或者红黑树。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于《Java版人脸跟踪三部曲》系列 -《Java版人脸跟踪三部曲》系列是欣宸的又一原创,目标是通过理论加实战,与…