XxwGit 的个人博客

记录精彩的程序人生

目录
JDK源码阅读顺序
/  

JDK源码阅读顺序

转载自:https://blog.csdn.net/qq_21033663/article/details/79571506

很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起。以下为小编整理的通常所需阅读的源码范围。
标题为包名,后面序号为优先级1-4,优先级递减。

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  

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  

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  

java.util.concurrent.atomic

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

java.lang.reflect

1) Field 2  
2) Method 2  

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  

java.util.concurrent.locks

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

java.io

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

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  

java.sql

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

java.net

1) Socket 3  
2) ServerSocket 3  
3) URI 4  
4) URL 4  
5) URLEncoder 4  

阅读笔记简版

1、Object

  • wait(), notify(), notifyAll(), wait(timeout)
  • hashCode(), equals()
  • clone()

2、String

  • char[] value
  • int hash
  • equals(), startWith(), endWith(), replace

3、AbstractStringBuilder

  • char[] value
  • int count
  • 扩容:翻倍,不够取所需最小

4、StringBuffer

  • 继承AbstractStringBuilder
  • synchronized方法保证线程安全
  • char[] toStringCache

5、StringBuilder 继承AbstractStringBuilder

6、ArrayList

  • Object[] elementData
  • int size
  • 默认大小10
  • 扩容:1.5倍,不够取所需最小

7、LinkedList

  • Node {E item, Node prev, Node next}
  • int size
  • Node first
  • Node last
  • linkFirst(), linkLast(), linkBefore(), unLinkFirst(), unLinkLast(), unLink(), indexOf()

8、HashMap

  • Node{int hash, K key, V value, Node next}
  • 默认容量16,负载因子0.75f
  • int size, modCount, threshold, float loadFactor
  • Node[] table
  • Set entrySet
  • put():根据key算hash,根据容量和hash算index,table[index]没有直接添加到数组中,table[index]有,若index位置同一个key则更新,否则遍历next是否有,有则更新,无则新增,最后根据thread与size判断是否扩容。注:扩容时容量翻倍,重新算hash复制到新数组
  • get()类似
    注:先比较hash,若相等在比较equals

9、Hashtable

  • 结构实现与HashMap基本一致
  • 通过synchronized方法保证线程安全

10、HashSet:委托给HashMap,其Value是同一个默认对象

11、LinkedHashMap继承HashMap

  • Entry{HashMap.Node, Entry before, after}
  • Entry head, tail
  • 重写newNode()添加节点时,除像HashMap中添加外,保存before、after信息

12、LinkedHashSet继承HashSet:底层存储使用的LinkedHashMap,从而保证有序

13、AbstractMap维护EntrySet,AbstractSet维护Iterator,AbstractList维护Iterator

14、ConcurrentHashMap

  • JDK1.7及以前:
    a、Segment[] ,HashEntry[] , HashEntry{hash, k, v, next}
    b、根据key算hash,根据hash和Segment的大小算位置,每个segment拥有一个自己的HashEntry[]
    c、get():不加锁,volatile类型
    d、put(): 对相应segment加锁
    e、size():各HashEntry[] 之和,先不加锁算两遍,若一致则返回,若不一致则加锁重新计算
  • JDK1.8
    a、Node{hash, key, value, next}
    b、Node[] table
    c、大多数操作类似于HashMap,不同CAS方式设置,根据key算hash,在根据hash和容量算index,对table[index]加锁,从而达到更大的并发量
    d、get(): 同HashMap
    e、put(): 对table[index]加锁

15、TreeMap

  • 红黑树,即自平衡二叉查找树,时间复杂度O(logn)
  • Entry{K k, V v, Entry parent, left, right, boolean color}
  • Entry root,int size, int modeCount

16、TreeSet:委托TreeMap实现


标题:JDK源码阅读顺序
作者:XxwGit
地址:http://xxwgit.cn/solo/articles/2019/08/28/1566961572033.html

评论