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