本書(shū)全面、系統(tǒng)地介紹了Java多線(xiàn)程相關(guān)的核心知識(shí)點(diǎn),把官方多線(xiàn)程的核心知識(shí)點(diǎn)用鏈路的方式講解清楚。讀者在學(xué)習(xí)的過(guò)程中需要循序漸進(jìn),核心知識(shí)點(diǎn)的理解是很重要的。由核心知識(shí)點(diǎn)擴(kuò)展開(kāi)來(lái)就可以形成萬(wàn)物。學(xué)習(xí)和創(chuàng)造希望讀者在此過(guò)程中能擁有自已的成長(zhǎng)和思維。 全書(shū)共分為10章。第1~3章介紹了線(xiàn)程的核心知識(shí)點(diǎn),第4章講解線(xiàn)程局部變量,第5章介紹Lock鎖,第6章講解原子包,第7章介紹阻塞隊(duì)列,第8章介紹線(xiàn)程池,第9章講解線(xiàn)程同步器,第10章是AQS源代碼分析。 本書(shū)每個(gè)章節(jié)都有相對(duì)應(yīng)的代碼驗(yàn)證環(huán)節(jié),提供大量應(yīng)用實(shí)例,每章節(jié)均附有習(xí)題。 本書(shū)適合有一定的Java基礎(chǔ)知識(shí),包括語(yǔ)法、結(jié)構(gòu)、面像對(duì)象的編程概念。**還有一定的并發(fā)編程基礎(chǔ)的讀者閱讀。也可作為計(jì)算機(jī)相關(guān)專(zhuān)業(yè)的學(xué)習(xí)用書(shū)和參考教材,以及Java軟件開(kāi)發(fā)者的自學(xué)用書(shū)和研究人員的參考用書(shū)。
本書(shū)以JDK 17長(zhǎng)期維護(hù)版本為示例,詳細(xì)地介紹了Java多線(xiàn)程并發(fā)相關(guān)的知識(shí)體系,讓讀者不僅知其然,而且知其所以然。本書(shū)對(duì)多線(xiàn)程相關(guān)的理論分門(mén)別論,層層遞進(jìn)的進(jìn)行詳細(xì)的敘述和透徹的分析,既體現(xiàn)了各知識(shí)點(diǎn)之間的聯(lián)系,又兼顧了其漸進(jìn)性。本書(shū)在介紹每個(gè)知識(shí)點(diǎn)時(shí)都給出了該知識(shí)點(diǎn)的應(yīng)用場(chǎng)景,同時(shí)配合代碼演示,讓讀者更能明白其實(shí)現(xiàn)原理、使用方式。
2005年左右民用的多核CPU正式進(jìn)入市場(chǎng),標(biāo)志著一個(gè)新時(shí)代來(lái)臨了。雙核和多核處理器設(shè)計(jì)用于在一枚處理器中集成兩個(gè)或多個(gè)完整執(zhí)行內(nèi)核,以支持同時(shí)執(zhí)行并管理多個(gè)任務(wù)。以前的單核CPU相當(dāng)于一個(gè)人工作,它有很多任務(wù),并很快地在任務(wù)之間切換工作,給人們?cè)斐傻母杏X(jué)好像是同時(shí)在執(zhí)行,例如我上了一個(gè)聊天軟件,我又在打游戲,感覺(jué)好像在同時(shí)執(zhí)行,實(shí)際上單核CPU只是很快速地在各個(gè)任務(wù)之間切換工作,而多核心CPU相當(dāng)于有多個(gè)人在同時(shí)工作,這才是真正意義上的多核心同時(shí)工作,當(dāng)然它們也會(huì)在各個(gè)任務(wù)之間切換調(diào)度。
Java的多線(xiàn)程Thread核心類(lèi)早在JDK 1.0就已經(jīng)有了,從一開(kāi)始就確立了Java最基礎(chǔ)的線(xiàn)程模型,并且這樣的線(xiàn)程模型在后續(xù)的修補(bǔ)中,并未發(fā)生實(shí)質(zhì)上的變更,可以說(shuō)是一個(gè)具有傳承性的良好設(shè)計(jì)。
隨著多核CPU的到來(lái),在2004年發(fā)布的JDK 1.5中加入了Executors線(xiàn)程池、Callable、Future異步任務(wù)支持、Lock鎖、concurrent并發(fā)包下的大量工具類(lèi),標(biāo)志著Java多線(xiàn)程的時(shí)代來(lái)臨了。
本書(shū)特點(diǎn)
本書(shū)以JDK 17長(zhǎng)期維護(hù)版本為示例,詳細(xì)地介紹了與Java多線(xiàn)程并發(fā)相關(guān)的知識(shí)體系,讓讀者不僅知其然,而且知其所以然。本書(shū)對(duì)多線(xiàn)程相關(guān)的理論分門(mén)別類(lèi)、層層遞進(jìn)地進(jìn)行詳細(xì)敘述和透徹分析,既體現(xiàn)了各知識(shí)點(diǎn)之間的聯(lián)系,又兼顧了其漸進(jìn)性。本書(shū)在介紹每個(gè)知識(shí)點(diǎn)時(shí)都給出了該知識(shí)點(diǎn)的應(yīng)用場(chǎng)景,同時(shí)配合代碼演示,讓讀者更能明白其實(shí)現(xiàn)原理、使用方式。本書(shū)豐富的免費(fèi)配套資源包括源代碼、筆記、完整的配套視頻。
本書(shū)主要內(nèi)容
第1章介紹了Thread線(xiàn)程對(duì)象的創(chuàng)建方式、啟動(dòng)方式、常用方法、優(yōu)先級(jí)、守護(hù)線(xiàn)程。
第2章介紹了ThreadGroup線(xiàn)程組的概念、線(xiàn)程對(duì)象構(gòu)造器、線(xiàn)程類(lèi)常用方法、線(xiàn)程對(duì)象異常捕獲、等待線(xiàn)程對(duì)象銷(xiāo)毀、線(xiàn)程對(duì)象的優(yōu)雅關(guān)閉。
第3章介紹了線(xiàn)程之間的協(xié)作,synchronized對(duì)象鎖、線(xiàn)程死鎖的產(chǎn)生、Object對(duì)象監(jiān)視器、線(xiàn)程阻塞等待機(jī)制、線(xiàn)程喚醒機(jī)制、線(xiàn)程可見(jiàn)性、重排序、線(xiàn)程生命周期狀態(tài)。
第4章介紹了ThreadLocal線(xiàn)程局部變量的使用、實(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)類(lèi)ArrayBlockingQueue、LinkedBlockingQueue、LinkedTransferQueue、SynchronousQueue、PriorityBlockingQueue、DelayQueue。
第8章介紹了ThreadPoolExecutor線(xiàn)程池整個(gè)鏈路的串聯(lián)、ThreadPoolExecutor線(xiàn)程池的使用,源碼分析其核心概念、FutureTask的核心概念、AbstractExecutorService的使用、ScheduledThreadPoolExecutor定時(shí)器的使用,源碼分析其核心概念。
第9章介紹了線(xiàn)程同步器的使用、CountDownLatch、CyclicBarrier、Semaphore、Phaser。
第10章介紹了AbstractQueuedSynchronizer框架,詳細(xì)分析了其源碼,利用官方文檔示例實(shí)現(xiàn)自己的同步鎖、同步器。
讀者對(duì)象
所有對(duì)Java多線(xiàn)程感興趣的軟件開(kāi)發(fā)人員。
資源下載提示
素材(源碼)等資源: 掃描目錄上方的二維碼下載。
視頻等資源: 掃描封底的文泉云盤(pán)防盜碼,再掃描書(shū)中相應(yīng)章節(jié)中的二維碼,可以在線(xiàn)學(xué)習(xí)。
致謝
特別感謝清華大學(xué)出版社的趙佳霓編輯。感謝她對(duì)本書(shū)專(zhuān)業(yè)且高效的審閱及對(duì)本書(shū)提出的建設(shè)性意見(jiàn),有效推動(dòng)了本書(shū)的出版。同時(shí)也感謝參與本書(shū)出版的所有人員,在大家的辛勤努力下,才有了本書(shū)的順利出版。
劉寧萌2023年2月
劉寧萌,資深Java工程師。熱愛(ài)軟件技術(shù)行業(yè),機(jī)緣巧合進(jìn)入此行業(yè),希望能給此行業(yè)帶來(lái)一些好的東西。5年Java從業(yè)經(jīng)驗(yàn),多個(gè)開(kāi)源項(xiàng)目發(fā)起人,其中cpdog開(kāi)源項(xiàng)目已獲得JetBrains官方免費(fèi)開(kāi)源許可證。
第1章多線(xiàn)程基礎(chǔ)(54min)
1.1多線(xiàn)程帶來(lái)的好處和問(wèn)題
1.1.1多線(xiàn)程帶來(lái)的好處
1.1.2多線(xiàn)程帶來(lái)的問(wèn)題
1.2進(jìn)程和線(xiàn)程
1.3線(xiàn)程創(chuàng)建方式
1.4線(xiàn)程啟動(dòng)方式
1.5線(xiàn)程的概念及常用方法
1.5.1線(xiàn)程狀態(tài)
1.5.2常用方法
1.6線(xiàn)程的優(yōu)先級(jí)
1.7守護(hù)線(xiàn)程
小結(jié)
習(xí)題
第2章多線(xiàn)程進(jìn)階(149min)
2.1ThreadGroup類(lèi)線(xiàn)程組
2.1.1構(gòu)造器
2.1.2常用方法
2.2Thread線(xiàn)程對(duì)象構(gòu)造器
2.2.1stackSize(棧大小)
2.2.2共享線(xiàn)程局部變量
2.3Thread類(lèi)常用方法
2.4Thread線(xiàn)程對(duì)象異常捕獲
2.4.1線(xiàn)程對(duì)象自己的異常捕獲器
2.4.2所屬線(xiàn)程組對(duì)象異常捕獲器
2.4.3Thread類(lèi)全局異常捕獲器
2.5等待線(xiàn)程對(duì)象銷(xiāo)毀
2.6線(xiàn)程對(duì)象優(yōu)雅關(guān)閉
2.6.1中斷相關(guān)方法
2.6.2官方響應(yīng)中斷的方法
小結(jié)
習(xí)題
第3章多線(xiàn)程特性(132min)
3.1引出synchronized對(duì)象鎖
3.2synchronized對(duì)象鎖
3.2.1標(biāo)準(zhǔn)對(duì)象
3.2.2class對(duì)象
3.2.3鎖特性
3.3線(xiàn)程死鎖的產(chǎn)生
3.3.1JConsole
3.3.2jstack
3.4對(duì)象監(jiān)視器
3.4.1wait()
3.4.2wait(long timeoutMillis)
3.4.3notify()
3.4.4notifyAll()
3.5線(xiàn)程的可見(jiàn)性和重排序
3.5.1可見(jiàn)性
3.5.2重排序
3.6線(xiàn)程生命周期狀態(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線(xiàn)程局部變量(104min)
4.1在方法鏈路中傳遞數(shù)據(jù)
4.2引出線(xiàn)程局部變量
4.3線(xiàn)程局部變量核心概念
4.3.1Thread對(duì)象數(shù)據(jù)保存點(diǎn)
4.3.2線(xiàn)程局部變量操作入口
4.3.3線(xiàn)程局部變量數(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對(duì)象創(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章線(xiàn)程池(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章線(xiàn)程同步器(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é)