- 面试有可能会问到源码(juc包下的类)
- ReentrantLcok、CountDownLatch、……这些锁的实现原理
- 读源码很难
- 读源码的时候自己去尝试画图—->泳道图(哪个类里调用哪个方法)
源码阅读原则
- 读源码不要读的很细,比如不需要去钻边界条件(为什么边界这么处理的),或者为什么用i++,而不用i+1之类的
- 读源码时,先读骨架!!!
- 不要去抠小的细节,读懂源码的思路就可以了
- 有些结构性的东西,也是要去看的(详略得当)
- 数据结构大的层面上要有思考
- 由于多态的存在,会让源码看起来有点难
- 读源码时去画图理解—->泳道图
- 大面上阅读在需要大致了解这个类需要干什么的时候下会用
- 比如node节点干了什么
- 比如state干了什么
- 无关细节略过,不要从头开始读(不要读没用的),那样读起来很费劲,不是好方法
- 读源码时,固定的写法可以不用关注
- 对于原则要深刻认识
画两种图
- 方法执行的调用图—->哪个方法调用哪个方法,做笔记时可以做的更详细—->哪个方法干了什么事
- 类之间的类图(IDEA的community版本不支持直接生成类图,升级版本可以自己生成类图)
- 读源码更多的是在于自己去阅读—->手动画印象会更深刻一些!!!—->把图都画清楚了
- 面试的时候带笔纸(左手纸,右手笔)
- 把图画清楚
读源码时,先读骨架!!!
AQS最核心的内容在于其中的同步队列—->如何入队出队,之前入队出队是要加锁的(synchronized),而AQS中的入队出队用的都是CAS,用CAS的方法往队尾上加。
🤏随想
- ctrl+T在idea中可以查看子类实现或者重写的方法