1. 面试有可能会问到源码(juc包下的类)
  2. ReentrantLcok、CountDownLatch、……这些锁的实现原理
  3. 读源码很难
  4. 读源码的时候自己去尝试画图—->泳道图(哪个类里调用哪个方法)

源码阅读原则

  1. 读源码不要读的很细,比如不需要去钻边界条件(为什么边界这么处理的),或者为什么用i++,而不用i+1之类的
  2. 读源码时,先读骨架!!!
  3. 不要去抠小的细节,读懂源码的思路就可以了
  4. 有些结构性的东西,也是要去看的(详略得当)
  5. 数据结构大的层面上要有思考
  6. 由于多态的存在,会让源码看起来有点难
  7. 读源码时去画图理解—->泳道图
  8. 大面上阅读在需要大致了解这个类需要干什么的时候下会用
    1. 比如node节点干了什么
    2. 比如state干了什么
  9. 无关细节略过,不要从头开始读(不要读没用的),那样读起来很费劲,不是好方法
  10. 读源码时,固定的写法可以不用关注
  11. 对于原则要深刻认识

image.png

画两种图

  1. 方法执行的调用图—->哪个方法调用哪个方法,做笔记时可以做的更详细—->哪个方法干了什么事
  2. 类之间的类图(IDEA的community版本不支持直接生成类图,升级版本可以自己生成类图)
  3. 读源码更多的是在于自己去阅读—->手动画印象会更深刻一些!!!—->把图都画清楚了
    1. 面试的时候带笔纸(左手纸,右手笔)
    2. 把图画清楚

读源码时,先读骨架!!!

AQS最核心的内容在于其中的同步队列—->如何入队出队,之前入队出队是要加锁的(synchronized),而AQS中的入队出队用的都是CAS,用CAS的方法往队尾上加。


🤏随想

  1. ctrl+T在idea中可以查看子类实现或者重写的方法