本節書摘來自華章社群《java多線程程式設計核心技術》一書中的目錄,作者高洪岩,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視
前 言
為什麼要寫這本書
早在幾年前筆者就曾想過整理一份與java多線程有關的稿件,因為市面上所有的java書籍都是以一章或兩章的篇幅介紹多線程技術,并沒有完整地覆寫該技術的知識點,但可惜,苦于當時的時間及精力有限,一直沒有達成所願。
也許是注定的安排,我目前所在的機關是集技術與教育為一體的軟體類企業。我在工作中發現很多學員在學習完javase/javaee之後想對更深入的技術進行探索,比如在對大資料、分布式、高并發類的專題進行攻克時,立即遇到針對java.lang包中thread類的學習,但thread類的學習并不像jdbc那樣簡單,學習多線程會遇到太多的問題、彎路以及我們所謂的“坑”,為了帶領學員在技術層面上進行更高的追求,我将多線程的技術點以教案的方式進行整理,在課堂上與同學們一起學習、交流,同學們反響也非常熱烈。此至,若幹年前的心願終于了卻,學員們也很期待這本書能出版發行,因為這樣他們就有了真正的紙質參考資料,其他愛好java多線程的朋友們也在期盼本書的出版。本書能促進他們互相交流與學習,這就是我最大的心願。
本書秉承大道至簡的主導思想,隻介紹java多線程開發中最值得關注的内容,希望能抛磚引玉,以個人的一些想法和見解,為讀者拓展出更深入、更全面的思路。
本書特色
在本書寫作的過程中,我盡量減少“啰嗦”的文字語言,全部用案例來講解技術點的實作,使讀者看到代碼及運作結果後就可以知道此項目要解決的是什麼問題,類似于網絡中的部落格風格,可讓讀者用最短的時間學完相關知識點,明白這些知識點是如何應用的,以及在使用時要避免什麼。本書就像“瑞士軍刀”一樣,精短小,但卻非常鋒利,可幫讀者快速學習知識并解決問題。

前 言
<a href="https://yq.aliyun.com/articles/107518">第1章 java多線程技能</a>
<a href="https://yq.aliyun.com/articles/107527">1.1 程序和多線程的概念及線程的優點</a>
<a href="https://yq.aliyun.com/articles/107555">1.2 使用多線程</a>
<a href="https://yq.aliyun.com/articles/107561">1.3 currentthread()方法</a>
<a href="https://yq.aliyun.com/articles/107566">1.4 isalive()方法</a>
<a href="https://yq.aliyun.com/articles/107568">1.5 sleep()方法</a>
<a href="https://yq.aliyun.com/articles/107572">1.6 getid()方法</a>
<a href="https://yq.aliyun.com/articles/107590">1.7 停止線程</a>
<a href="https://yq.aliyun.com/articles/107600">1.8 暫停線程</a>
<a href="https://yq.aliyun.com/articles/107602">1.9 yield方法</a>
<a href="https://yq.aliyun.com/articles/107609">1.10 線程的優先級</a>
<a href="https://yq.aliyun.com/articles/107610">1.11 守護線程</a>
<a href="https://yq.aliyun.com/articles/107612">1.12 本章小結</a>
<a href="https://yq.aliyun.com/articles/107615">第2章 對象及變量的并發通路</a>
<a href="https://yq.aliyun.com/articles/107653">2.1 synchronized同步方法</a>
2.2 synchronized同步語句塊
2.2.1 synchronized方法的弊端
2.2.2 synchronized同步代碼塊的使用
2.2.3 用同步代碼塊解決同步方法的弊端
2.2.4 一半異步,一半同步
2.2.5 synchronized代碼塊間的同步性
2.2.6 驗證同步synchronized(this)代碼塊是鎖定目前對象的
2.2.7 将任意對象作為對象螢幕
2.2.8 細化驗證3個結論
2.2.9 靜态同步synchronized方法與synchronized(class)代碼塊
2.2.10 資料類型string的常量池特性
2.2.11 同步synchronized方法無限等待與解決
2.2.12 多線程的死鎖
2.2.13 内置類與靜态内置類
2.2.14 内置類與同步:實驗1
2.2.15 内置類與同步:實驗2
2.2.16 鎖對象的改變
2.3 volatile關鍵字
2.3.1 關鍵字volatile與死循環
2.3.2 解決同步死循環
2.3.3 解決異步死循環
2.3.4 volatile非原子的特性
2.3.5 使用原子類進行i++操作
2.3.6 原子類也并不完全安全
2.3.7 synchronized代碼塊有volatile同步的功能
2.4 本章總結
第3章 線程間通信
3.1 等待/通知機制
3.1.1 不使用等待/通知機制實作線程間通信
3.1.2 什麼是等待/通知機制
3.1.3 等待/通知機制的實作
3.1.4 方法wait()鎖釋放與notify()鎖不釋放
3.1.5 當interrupt方法遇到wait方法
3.1.6 隻通知一個線程
3.1.7 喚醒所有線程
3.1.8 方法wait(long)的使用
3.1.9 通知過早
3.1.10 等待wait的條件發生變化
3.1.11 生産者/消費者模式實作
3.1.12 通過管道進行線程間通信:位元組流
3.1.13 通過管道進行線程間通信:字元流
3.1.14 實戰:等待/通知之交叉備份
3.2 方法join的使用
3.2.1 學習方法join前的鋪墊
3.2.2 用join()方法來解決
3.2.3 方法join與異常
3.2.4 方法join(long)的使用
3.2.5 方法join(long)與sleep(long)的差別
3.2.6 方法join()後面的代碼提前運作:出現意外
3.2.7 方法join()後面的代碼提前運作:解釋意外
3.3 類threadlocal的使用
3.3.1 方法get()與null
3.3.2 驗證線程變量的隔離性
3.3.3 解決get()傳回null問題
3.3.4 再次驗證線程變量的隔離性
3.4 類inheritablethreadlocal的使用
3.4.1 值繼承 197
3.4.2 值繼承再修改
3.5 本章總結
第4章 lock的使用
4.1 使用reentrantlock類
4.1.1 使用reentrantlock實作同步:測試1
4.1.2 使用reentrantlock實作同步:測試2
4.1.3 使用condition實作等待/通知錯誤用法與解決
4.1.4 正确使用condition實作等待/通知
4.1.5 使用多個condition實作通知部分線程:錯誤用法
4.1.6 使用多個condition實作通知部分線程:正确用法
4.1.7 實作生産者/消費者模式:一對一交替列印
4.1.8 實作生産者/消費者模式:多對多交替列印
4.1.9 公平鎖與非公平鎖
4.1.10 方法getholdcount()、getqueuelength()和getwaitqueuelength()的測試
4.1.11 方法hasqueuedthread()、hasqueuedthreads()和haswaiters()的測試
4.1.12 方法isfair()、isheldbycurrentthread()和islocked()的測試
4.1.13 方法lockinterruptibly()、trylock()和trylock(long timeout,timeunit unit)的測試
4.1.14 方法awaituninterruptibly()的使用
4.1.15 方法awaituntil()的使用
4.1.16 使用condition實作順序執行
4.2 使用reentrantreadwritelock類
4.2.1 類reentrantreadwritelock的使用:讀讀共享
4.2.2 類reentrantreadwritelock的使用:寫寫互斥
4.2.3 類reentrantreadwritelock的使用:讀寫互斥
4.2.4 類reentrantreadwritelock的使用:寫讀互斥
4.3 本章總結
第5章 定時器timer
5.1 定時器timer的使用
5.1.1 方法schedule(timertask task, date time)的測試
5.1.2 方法schedule(timertask task, date firsttime, long period)的測試
5.1.3 方法schedule(timertask task, long delay)的測試
5.1.4 方法schedule(timertask task, long delay, long period)的測試
5.1.5 方法scheduleatfixedrate(timertask task, date firsttime, long period)的測試
5.2 本章總結
第6章 單例模式與多線程
6.1 立即加載/“餓漢模式”
6.2 延遲加載/“懶漢模式”
6.3 使用靜态内置類實作單例模式
6.4 序列化與反序列化的單例模式實作
6.5 使用static代碼塊實作單例模式
6.6 使用enum枚舉資料類型實作單例模式
6.7 完善使用enum枚舉實作單例模式
6.8 本章總結
第7章 拾遺增補
7.1 線程的狀态
7.1.1 驗證new、runnable和terminated
7.1.2 驗證timed_waiting
7.1.3 驗證blocked
7.1.4 驗證waiting
7.2 線程組
7.2.1 線程對象關聯線程組:1級關聯
7.2.2 線程對象關聯線程組:多級關聯
7.2.3 線程組自動歸屬特性
7.2.4 擷取根線程組
7.2.5 線程組裡加線程組
7.2.6 組内的線程批量停止
7.2.7 遞歸與非遞歸取得組内對象
7.3 使線程具有有序性
7.4 simpledateformat非線程安全
7.4.1 出現異常
7.4.2 解決異常方法1
7.4.3 解決異常方法2
7.5 線程中出現異常的處理
7.6 線程組内處理異常
7.7 線程異常處理的傳遞
7.8 本章總結