2020年Flag-阅读jdk源码

2020年新年Flag的第一条就是阅读完jdk重要类的源码,当然踩在巨人的肩膀上能看得更远,所以参考了网友的经验先陈列一下,首先看一下有必要阅读的源码范围:
标题为包名,后面序号为优先级1-4,优先级递减

1、java.lang

1) Object 1
2) String 1
3) AbstractStringBuilder 1
4) StringBuffer 1
5) StringBuilder 1
6) Boolean 2
7) Byte 2
8) Double 2
9) Float 2
10) Integer 2
11) Long 2
12) Short 2
13) Thread 2
14) ThreadLocal 2
15) Enum 3
16) Throwable 3
17) Error 3
18) Exception 3
19) Class 4
20) ClassLoader 4
21) Compiler 4
22) System 4
23) Package 4
24) Void 4

2、java.util

1) AbstractList 1
2) AbstractMap 1
3) AbstractSet 1
4) ArrayList 1
5) LinkedList 1
6) HashMap 1
7) Hashtable 1
8) HashSet 1
9) LinkedHashMap 1
10) LinkedHashSet 1
11) TreeMap 1
12) TreeSet 1
13) Vector 2
14) Queue 2
15) Stack 2
16) SortedMap 2
17) SortedSet 2
18) Collections 3
19) Arrays 3
20) Comparator 3
21) Iterator 3
22) Base64 4
23) Date 4
24) EventListener 4
25) Random 4
26) SubList 4
27) Timer 4
28) UUID 4
29) WeakHashMap 4

3、java.util.concurrent

1) ConcurrentHashMap 1
2) Executor 2
3) AbstractExecutorService 2
4) ExecutorService 2
5) ThreadPoolExecutor 2
6) BlockingQueue 2
7)AbstractQueuedSynchronizer 2
8)CountDownLatch 2
9) FutureTask 2
10)Semaphore 2
11)CyclicBarrier 2
13)CopyOnWriteArrayList 3
14)SynchronousQueue 3
15)BlockingDeque 3
16) Callable 4

4、java.util.concurrent.atomic

1) AtomicBoolean 2
2) AtomicInteger 2
3) AtomicLong 2
4) AtomicReference 3

5、java.lang.reflect

1) Field 2
2) Method 2

6、java.lang.annotation

1) Annotation 3
2) Target 3
3) Inherited 3
4) Retention 3
5) Documented 4
6) ElementType 4
7) Native 4
8) Repeatable 4

7、java.util.concurrent.locks

1) Lock 2
2) Condition 2
3) ReentrantLock 2
4) ReentrantReadWriteLock 2

8、java.io

1) File 3
2) InputStream   3
3) OutputStream  3
4) Reader  4
5) Writer  4

9、java.nio

1) Buffer 3
2) ByteBuffer 4
3) CharBuffer 4
4) DoubleBuffer 4
5) FloatBuffer 4
6) IntBuffer 4
7) LongBuffer 4
8) ShortBuffer 4

10、java.sql

1) Connection 3
2) Driver 3
3) DriverManager 3
4) JDBCType 3
5) ResultSet 4
6) Statement 4

11、java.net

1) Socket 3
2) ServerSocket 3
3) URI 4
4) URL 4
5) URLEncoder 4
  • 参考一位大牛的经验分享:读jdk源码

今年争取把优先级高的类源码看完,人活在世上,总要留点什么。。。

前人总结的看jdk源码的方法:

  • 理论先行
    阅读某一个模块时,先搜索它的理论支撑,甚至可以先看别人的阅读经验,有了一个大致的了轮廓之后,自己再去实践。
  • 必须试用
    面对一个新的类,最好是先搜索一下它的基本用法,写成一个小的示例,并从这个示例中用到的方法入手,去分析这个类。
  • 巧用调试
    关于IDEA中debug的使用方式,超出了本文的讲述范围。值的注意的是,除了需要学习常用的运行时调试,还需要学习编译时调试,这个在阅读Java语言模型那块的代码时很有用。
  • 分清主次
    类与类之间呈网状结构,在阅读某个类的时候,不可避免地需要先去阅读它引用的其他类。但是,如果它引用的类很复杂,则建议先放一放,做个标记,回头再读。不过,如果在阅读多个类时,其调用链最终都指向了同一个类,那么这个类就必须先拿下了。
  • 业务为先
    如果一个类太过庞大,则先将其中的方法按功能归类,捋清大致的执行流程,接下来再逐个功能地去攻克。
  • 不求甚解
    有些方法不需要搞清楚实现过程,只需要了解它的作用。比如一些特定领域的算法,对某些规则的解析等。
  • 以点带面
    如果看懂了某一个方法,就要搜索该方法的所有应用之处,验证自己的想法是否正确,并在应用之处写下注释。哪怕理解的有误差也没事,回头有新的理解再批量修改。对于字段的阅读与理解,也建议采取此种方式。
  • 勇于试错
    很多接口方法的描述很抽象,在不同的实现类中意义相差很大。此时先弄懂一个类的实现,然后拿着在这个类中的理解去解读另外的实现类,如果解读有误,再逐渐修复。不要指望一次性就能正确地理解某个方法的作用,理解错误,不妨碍继续前进。
  • 留意注释
    大部分公开的方法上都有相应的注释,这是快速理解这个方法的重要途径。注释建议拿到谷歌翻译下去阅读,当然,如果能流利阅读英文就更好了。不过,很多时候,注释是令人沮丧的:看完之后完全不知道他在说啥。这个也很正常,因为有些注释中会涉及到很多行业术语或通用解决方案的描述,如果之前没有这些理论背景,大概率是读不懂注释的。原生注释不是万能的,有时候甚至很鸡肋:你不理解这个方法之前,也不理解他的注释,等你理解了这个方法,才会觉得这些注释说得对。因此,我建议留意注释,但别依赖注释,有时候搜索其他网友的理解,再结合自己的阅读,会来的更舒服一些。
  • 勤做笔记
    有一点灵感,就需要记录一下,最好是直接记录在源码对应的位置,而且能详细就别简略,好记性终究抵不过烂笔头。
  • 循序渐进
    在头脑清醒的时候,打开源码读一读,感觉读不懂的时候,就不要继续死磕了,应该放下干点别的,或者改天再读。我读完一个类,时间跨度可能会超过一个月,这是个不断补充和完善的过程,不可能一次性就搞定。有时候眼看就读懂了,但就是差一点点关键性的理解,这个时候人就容易急,急就容易燥,燥就容易慌,慌就容易乱,乱就容易砸鼠标。所以,一旦觉得遇到瓶颈,那就及时终止吧,因为你可能需要放松大脑,以及补充一些缺失的基础理论了。

你可能感兴趣的:(2020年Flag-阅读jdk源码)