2005年左右民用的多核CPU正式進入市場,標志著一個新時代來臨了。雙核和多核處理器設計用于在一枚處理器中集成兩個或多個完整執行內核,以支持同時執行并管理多個任務。以前的單核CPU相當于一個人工作,它有很多任務,并很快地在任務之間切換工作,給人們造成的感覺好像是同時在執行,例如我上了一個聊天軟件,我又在打游戲,感覺好像在同時執行,實際上單核CPU只是很快速地在各個任務之間切換工作,而多核心CPU相當于有多個人在同時工作,這才是真正意義上的多核心同時工作,當然它們也會在各個任務之間切換調度。
Java的多線程Thread核心類早在JDK 1.0就已經有了,從一開始就確立了Java最基礎的線程模型,并且這樣的線程模型在后續的修補中,并未發生實質上的變更,可以說是一個具有傳承性的良好設計。
隨著多核CPU的到來,在2004年發布的JDK 1.5中加入了Executors線程池、Callable、Future異步任務支持、Lock鎖、concurrent并發包下的大量工具類,標志著Java多線程的時代來臨了。
本書特點
本書以JDK 17長期維護版本為示例,詳細地介紹了與Java多線程并發相關的知識體系,讓讀者不僅知其然,而且知其所以然。本書對多線程相關的理論分門別類、層層遞進地進行詳細敘述和透徹分析,既體現了各知識點之間的聯系,又兼顧了其漸進性。本書在介紹每個知識點時都給出了該知識點的應用場景,同時配合代碼演示,讓讀者更能明白其實現原理、使用方式。本書豐富的免費配套資源包括源代碼、筆記、完整的配套視頻。
本書主要內容
第1章介紹了Thread線程對象的創建方式、啟動方式、常用方法、優先級、守護線程。
第2章介紹了ThreadGroup線程組的概念、線程對象構造器、線程類常用方法、線程對象異常捕獲、等待線程對象銷毀、線程對象的優雅關閉。
第3章介紹了線程之間的協作,synchronized對象鎖、線程死鎖的產生、Object對象監視器、線程阻塞等待機制、線程喚醒機制、線程可見性、重排序、線程生命周期狀態。
第4章介紹了ThreadLocal線程局部變量的使用、實現機制的核心概念、Reference弱引用。
第5章介紹了Lock鎖接口的相關規范,以及ReentrantLock、Condition、ReentrantReadWriteLock。
第6章介紹了atomic原子包、AtomicBoolean、AtomicInteger、AtomicReference、AtomicIntegerFieldUpdater、AtomicIntegerArray、LongAdder。
第7章介紹了BlockingQueue接口的相關規范,及其核心實現類ArrayBlockingQueue、LinkedBlockingQueue、LinkedTransferQueue、SynchronousQueue、PriorityBlockingQueue、DelayQueue。
第8章介紹了ThreadPoolExecutor線程池整個鏈路的串聯、ThreadPoolExecutor線程池的使用,源碼分析其核心概念、FutureTask的核心概念、AbstractExecutorService的使用、ScheduledThreadPoolExecutor定時器的使用,源碼分析其核心概念。
第9章介紹了線程同步器的使用、CountDownLatch、CyclicBarrier、Semaphore、Phaser。
第10章介紹了AbstractQueuedSynchronizer框架,詳細分析了其源碼,利用官方文檔示例實現自己的同步鎖、同步器。
讀者對象
所有對Java多線程感興趣的軟件開發人員。
資源下載提示
素材(源碼)等資源: 掃描目錄上方的二維碼下載。
視頻等資源: 掃描封底的文泉云盤防盜碼,再掃描書中相應章節中的二維碼,可以在線學習。
致謝
特別感謝清華大學出版社的趙佳霓編輯。感謝她對本書專業且高效的審閱及對本書提出的建設性意見,有效推動了本書的出版。同時也感謝參與本書出版的所有人員,在大家的辛勤努力下,才有了本書的順利出版。
劉寧萌2023年2月
第1章多線程基礎(54min)
1.1多線程帶來的好處和問題
1.1.1多線程帶來的好處
1.1.2多線程帶來的問題
1.2進程和線程
1.3線程創建方式
1.4線程啟動方式
1.5線程的概念及常用方法
1.5.1線程狀態
1.5.2常用方法
1.6線程的優先級
1.7守護線程
小結
習題
第2章多線程進階(149min)
2.1ThreadGroup類線程組
2.1.1構造器
2.1.2常用方法
2.2Thread線程對象構造器
2.2.1stackSize(棧大小)
2.2.2共享線程局部變量
2.3Thread類常用方法
2.4Thread線程對象異常捕獲
2.4.1線程對象自己的異常捕獲器
2.4.2所屬線程組對象異常捕獲器
2.4.3Thread類全局異常捕獲器
2.5等待線程對象銷毀
2.6線程對象優雅關閉
2.6.1中斷相關方法
2.6.2官方響應中斷的方法
小結
習題
第3章多線程特性(132min)
3.1引出synchronized對象鎖
3.2synchronized對象鎖
3.2.1標準對象
3.2.2class對象
3.2.3鎖特性
3.3線程死鎖的產生
3.3.1JConsole
3.3.2jstack
3.4對象監視器
3.4.1wait()
3.4.2wait(long timeoutMillis)
3.4.3notify()
3.4.4notifyAll()
3.5線程的可見性和重排序
3.5.1可見性
3.5.2重排序
3.6線程生命周期狀態
3.6.1NEW
3.6.2RUNNABLE
3.6.3BLOCKED
3.6.4WAITING
3.6.5TIMED_WAITING
3.6.6TERMINATED
小結
習題
第4章ThreadLocal線程局部變量(104min)
4.1在方法鏈路中傳遞數據
4.2引出線程局部變量
4.3線程局部變量核心概念
4.3.1Thread對象數據保存點
4.3.2線程局部變量操作入口
4.3.3線程局部變量數據操作功能
4.3.4弱引用介紹
小結
習題
第5章Lock鎖(104min)
5.1Lock接口
5.2ReentrantLock
5.2.1構造器
5.2.2常用方法
5.2.3公平鎖或非公平鎖
5.2.4自旋鎖
5.3Condition
5.4ReentrantReadWriteLock
5.4.1構造器
5.4.2共享鎖和互斥鎖
5.4.3重入特性
5.4.4常用方法
小結
習題
第6章atomic原子包(117min)
6.1AtomicBoolean
6.1.1構造器
6.1.2常用方法
6.2AtomicInteger
6.2.1構造器
6.2.2常用方法
6.3AtomicReference
6.3.1構造器
6.3.2常用方法
6.4AtomicIntegerFieldUpdater
6.4.1對象創建
6.4.2常用方法
6.5AtomicIntegerArray
6.5.1構造器
6.5.2常用方法
6.6LongAdder
6.6.1實現方式
6.6.2常用方法
小結
習題
第7章阻塞隊列(216min)
7.1ArrayBlockingQueue
7.1.1構造器
7.1.2常用方法
7.2LinkedBlockingQueue
7.2.1構造器
7.2.2常用方法
7.3LinkedTransferQueue
7.3.1構造器
7.3.2常用方法
7.4SynchronousQueue
7.4.1構造器
7.4.2常用方法
7.5DelayQueue
7.5.1構造器
7.5.2常用方法
7.6PriorityBlockingQueue
7.6.1構造器
7.6.2常用方法
小結
習題
第8章線程池(248min)
8.1ThreadPoolExecutor
8.1.1構造器
8.1.2常用方法
8.2FutureTask
8.2.1構造器
8.2.2常用方法
8.3AbstractExecutorService
8.3.1構造器
8.3.2常用方法
8.4ScheduledThreadPoolExecutor
8.4.1構造器
8.4.2常用方法
小結
習題
第9章線程同步器(152min)
9.1CountDownLatch
9.1.1構造器
9.1.2常用方法
9.2CyclicBarrier
9.2.1構造器
9.2.2常用方法
9.3Semaphore
9.3.1構造器
9.3.2常用方法
9.4Phaser
9.4.1構造器
9.4.2常用方法
小結
習題
第10章AQS源碼分析
10.1構造器
10.2常用方法
10.3ConditionObject
小結