https://weibo.com/6515091862/G9DawzK9f
https://weibo.com/6515091862/G9D6x1kQr
https://weibo.com/6515091862/G9Bo8oRCp
1. 前言
终于到这个类了,其实在前面很过很多次这个类,因为这个类代码量比较大,并且涉及到并发的问题,还有一点就是这个代码有些真的晦涩,不好懂。前前后后大概花了三天的时间看完的一些重要操作,接着今天来整理一下。
好了首先介绍一个个人的感受:
- 首先这个类很多操作和
HashMap
是类似的,但是麻烦就麻烦在锁分离技术
和并发处理
- 底层还是采用的
数组
+链表
+红黑树
来实现的,但是红黑树的TreeNode
改成了TreeBin
- 里面有很多 CAS (Compare And Swap)操作,比如说
unsafe.compareAndSwapInt(this, valueOffset, expect, update)
意思是如果valueOffset
位置包含的值与expect
值相同,则更新valueOffset
位置的值为update,并返回true,否则不更新,返回false。 - 不仅仅是 CAS 还有一些重量级的锁。也就是
synchronized代码块
用来保证操作同一数组元素下的节点的一致性,后面会看到。
- 首先这个类很多操作和
https://weibo.com/6515091862/G9Bo8oRCp
https://weibo.com/6515091862/G9BnK91Cl
https://weibo.com/6515092670/G9DfQCT4g
https://weibo.com/6515092670/G9Dgr03Xi
https://weibo.com/6515092670/G9DgMysfu
https://weibo.com/6515092670/G9Dh7w64g
https://weibo.com/6515092670/G9DhmkBKV
https://weibo.com/6515092670/G9DhKf4Fu
https://weibo.com/6515092670/G9Di8x3Jf
https://weibo.com/6515092670/G9DisxAxo
https://weibo.com/6515092670/G9DiIhUiP