本書通過圖文結(jié)合的講解方式幫助讀者理解JDK源碼,完成多線程并發(fā)編程從入門到實(shí)踐的飛躍,全書分為7章:第1章主要講解Java基礎(chǔ)類的源碼實(shí)現(xiàn);第2章主要剖析了常用集合類的原理源碼;第3章講解了常用原子類AtomicLong和LongAdder的用法和原理;第4章主要剖析了JUC獨(dú)占鎖ReentrantLock的原理源碼,ReentrantLock是學(xué)習(xí)其他并發(fā)類的基礎(chǔ);第5章剖析了兩種常用并發(fā)容器List和Map的實(shí)現(xiàn)原理,重點(diǎn)講解了ConcurrentHashMap的實(shí)現(xiàn);第6章講解了阻塞隊(duì)列的實(shí)現(xiàn),著重講解其代表類ArrayBlockingQueue 和LinkedBlockingQueue的原理源碼;第7章剖析了線程池的原理源碼。
本書適合Java研發(fā)工程師、對JDK源碼或Java并發(fā)編程感興趣以及希望探索JUC包原理源碼人員閱讀。
前言
●第1章Java必須掌握的基礎(chǔ)類
1.1JDK中所有類的基類——Object類
1.1.1為什么java.lang包下的類不需要手動導(dǎo)入
1.1.2類構(gòu)造器
1.1.3equals方法
1.1.4getClass方法
1.1.5hashCode方法
1.1.6toString方法
1.1.7notify()/notifyAll()/wait()
1.1.8finalize方法
1.1.9registerNatives方法
1.2Java的深拷貝和淺拷貝
1.2.1創(chuàng)建對象的5種方式
1.2.2Clone方法
1.2.3基本類型和引用類型
1.2.4淺拷貝
1.2.5深拷貝
1.2.6如何實(shí)現(xiàn)深拷貝
1.3最常用的引用類——Integer類
1.3.1Integer類簡介
1.3.2Integer的主要屬性
1.3.3Integer類和int的區(qū)別
1.3.4構(gòu)造方法Integer(int),Integer(String)
1.3.5toString(),toString(int i)和toString(int i,int radix)
1.3.6自動拆箱和裝箱
1.3.7回顧本節(jié)開篇的問題
1.3.8進(jìn)行測試
1.3.9equals()方法
1.3.10String類的定義
1.3.11hashCode()方法
1.3.12parseInt(String s)和parseInt(String s,int radix)方法
1.3.13compareTo(Integer anotherInteger)和compare(int x,int y)方法
1.4日常編碼中最常用的類——String類
1.4.1字段屬性
1.4.2構(gòu)造方法
1.4.3equals(Object anObject)方法
1.4.4hashCode()方法
1.4.5charAt(int index)方法
1.4.6compareTo(String anotherString)和compareToIgnoreCase(String str)方法
1.4.7concat(String str)方法
1.4.8indexOf(int ch)和indexOf(int ch,int fromIndex)方法
1.4.9split(String regex)和split(String regex,int limit)方法
1.4.10replace(char oldChar,char newChar)和String replaceAll(String regex,
String replacement)方法
1.4.11substring(int beginIndex)和substring(int beginIndex,int endIndex)方法
1.4.12常量池
1.4.13intern()方法
1.4.14String真的不可變嗎
1.5本章小結(jié)
●第2章Java數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)集合類
2.1集合工具類的重要類——Arrays類
2.1.1asList方法
2.1.2sort方法
2.1.3binarySearch方法
2.1.4copyOf方法
2.1.5equals 和 deepEquals方法
2.1.6fill方法
2.1.7toString 和 deepToString方法
2.2List集合的一種典型實(shí)現(xiàn)——ArrayList類
2.2.1ArrayList 定義
2.2.2字段屬性
2.2.3構(gòu)造函數(shù)
2.2.4添加元素
2.2.5刪除元素
2.2.6修改元素
2.2.7查找元素
2.2.8遍歷集合
2.2.9SubList 方法
2.2.10size()方法
2.2.11isEmpty()方法
2.2.12trimToSize()方法
2.3List 集合的另一種典型實(shí)現(xiàn)——LinkedList 類
2.3.1LinkedList定義
2.3.2字段屬性
2.3.3構(gòu)造函數(shù)
2.3.4添加元素
2.3.5刪除元素
2.3.6修改元素
2.3.7查找元素
2.3.8遍歷集合
2.3.9迭代器和for循環(huán)效率差異
2.4常用的集合——HashMap 類
2.4.1Hash表
2.4.2什么是HashMap
2.4.3HashMap定義
2.4.4字段屬性
2.4.5構(gòu)造函數(shù)
2.4.6確定Hash桶數(shù)組索引位置
2.4.7添加元素
2.4.8擴(kuò)容機(jī)制
2.4.9刪除元素
2.4.10查找元素
2.4.11遍歷元素
2.5Map 集合的一種實(shí)現(xiàn)——LinkedHashMap 類
2.5.1LinkedHashMap 定義
2.5.2字段屬性
2.5.3構(gòu)造函數(shù)
2.5.4添加元素
2.5.5刪除元素
2.5.6查找元素
2.5.7遍歷元素
2.5.8迭代器
2.6基于樹實(shí)現(xiàn)的類——TreeMap類
2.6.1TreeMap 定義
2.6.2字段定義
2.6.3構(gòu)造函數(shù)
2.6.4添加元素
2.6.5刪除元素
2.6.6查找元素
2.6.7遍歷元素
2.7本章小結(jié)
●第3章Java并發(fā)包原子類
3.1原子變量操作類AtomicLong
3.2高性能原子操作類LongAdder
3.2.1LongAdder介紹
3.2.2LongAdder源碼解析
3.3本章小結(jié)
●第4章Java并發(fā)包鎖
4.1為什么引入JUC鎖
4.2獨(dú)占鎖ReentrantLock原理
4.2.1ReentrantLock簡介
4.2.2AQS同步隊(duì)列
4.2.3鎖的獲取
4.2.4鎖的釋放
4.2.5公平鎖和非公平鎖實(shí)現(xiàn)區(qū)別
4.3Condition條件變量
4.3.1Condition案例
4.3.2Condition的源碼解析
4.4本章小結(jié)
●第5章并發(fā)容器原理
5.1List并發(fā)容器
5.1.1add方法:添加元素
5.1.2修改/插入/刪除
5.1.3get方法:獲取元素
5.2Map并發(fā)容器
5.2.1ConcurrentHashMap簡介
5.2.2put方法:添加元素
5.2.3remove方法:刪除元素
5.2.4get方法:獲取元素
5.2.5獲取元素個數(shù):size方法
5.2.6擴(kuò)容與數(shù)據(jù)遷移
5.3本章小結(jié)
●第6章阻塞隊(duì)列原理
6.1生產(chǎn)者-消費(fèi)者模式
6.2阻塞隊(duì)列實(shí)現(xiàn)原理
6.3ArrayBlockingQueue源碼解析
6.3.1出隊(duì)和入隊(duì)的環(huán)形隊(duì)列
6.3.2插入元素
6.3.3移除元素
6.4LinkedBlockingQueue源碼解析
6.4.1插入元素
6.4.2移除元素
6.5本章小結(jié)
●第7章線程池原理解析
7.1為什么要用線程池
7.2線程池的優(yōu)點(diǎn)
7.3線程池實(shí)現(xiàn)原理
7.4線程池ThreadPoolExecutor
7.5ThreadPoolExecutor源碼解析
7.5.1execute提交任務(wù)
7.5.2addWorker創(chuàng)建并執(zhí)行工作線程
7.5.3關(guān)閉線程池
7.6本章小結(jié)
●附錄
紅黑樹
基礎(chǔ)工具類:Unsafe類
基礎(chǔ)工具類:LockSupport類