前言
并發編程可選擇的方式有多行程、多執行緒和多協程,對于Java來說,它既不像C++那樣,在運行中呼叫Linux的系統API去“fork”出多個行程;也不像Go那樣,在語言層面原生提供多協程,在Java中,并發就是多執行緒模式,
本文基于JDK 7和JDK 8,對整個Concurrent包進行全面的原始碼剖析,JDK 8中大部分并發功能的實作和JDK 7一樣,但新增了一些額外特性,例如CompletableFuture、ConcurrentHashMap的新實作、StampedLock、LongAdder等,
對整個Concurrent包的原始碼進行分析,有以下幾個目的:
- (1)幫助使用者合理地選擇解決方案,Concurrent包很龐大,有各式各樣的執行緒互斥與同步機制,明白實作原理,使用者可以根據自己的業務場景,選擇最適合自己的解決方案,避免重復造輪子,也避免因為使用不當而掉到“坑”里,
- (2)對原始碼的分析,將讓使用者對記憶體屏障、CAS原子操作、鎖、無鎖等底層原理的認識,不再停留于一個“似是而非”的階段,而是深刻地認識其本質,
- (3)吸收借鑒大師的思維,在 Concurrent 包中,可以看到各種巧妙的并發處理策略,看了Concurrent包,才會發現在多執行緒中,不是只有簡陋的互斥鎖、通知機制和執行緒池,
本文將從多執行緒基礎知識講起,逐步地深入整個Concurrent包,讀完本書,你將對多執行緒的原理、各種并發的設計原理有一個全面而深刻的理解,
第1章 多執行緒基礎
- 1.1 執行緒的優雅關閉
- 1.2 InterruptedException()函式與interrupt()函式
- 1.3 synchronized關鍵字
- 1.4 wait()與notify()
- 1.5 volatile關鍵字
- 1.6 JMM與happen-before
- 1.7 記憶體屏障
- 1.8 final關鍵字
- 1.9 綜合應用:無鎖編程

第2章 Atomic類
從本章開始,我們將從簡單到復雜,從底層到上層,一步步剖析整個 Concurrent 包的層次體系,如圖所示:

- 2.1 AtomicInteger和AtomicLong
- 2.2 AtomicBoolean和AtomicReference
- 2.3 AtomicStampedReference和AtomicMarkableReference
- 2.4 AtomicIntegerFieldUpdater、AtomicLongFieldUpdater和AtomicReferenceFieldUpdater
- 2.5 AtomicIntegerArray、AtomicLongArray和Atomic-ReferenceArray
- 2.6 Striped64與LongAdder

第3章 Lock與Condition
- 3.1 互斥鎖
- 3.2 讀寫鎖
- 3.3 Condition
- 3.4 StampedLock

第4章 同步工具類
除了鎖與 Condition,Concurrent 包還提供了一系列同步工具類,這些同步工具類的原理,有些也是基于AQS的,有些則需要特殊的實作機制,這一章將對所有同步工具類的實作原理進行剖析,
- 4.1 Semaphore
- 4.2 CountDownLatch
- 4.3 CyclicBarrier
- 4.4 Exchanger
- 4.5 Phaser

第5章 并發容器
在Lock和Phaser的實作中,已經介紹了基于CAS實作的無鎖佇列和無鎖堆疊,本章將全面介紹Concurrent包提供的各種并發容器,
- 5.1 BlockingQueue
- 5.2 BlockingDeque
- 5.3 CopyOnWrite
- 5.4 ConcurrentLinkedQueue/Deque
- 5.5 ConcurrentHashMap
- 5.6 ConcurrentSkipListMap/Set

第6章 執行緒池與Future
- 6.1 執行緒池的實作原理
- 6.2 執行緒池的類繼承體系
- 6.3 ThreadPoolExector
- 6.4 Callable與Future
- 6.5 ScheduledThreadPoolExecutor
- 6.6 Executors工具類

第7章 ForkJoinPool
- 7.1 ForkJoinPool用法
- 7.2 核心資料結構
- 7.3 作業竊取佇列
- 7.4 ForkJoinPool狀態控制
- 7.5 Worker執行緒的阻塞—喚醒機制
- 7.6 任務的提交程序分析
- 7.7 作業竊取演算法:任務的執行程序分析
- 7.8 ForkJoinTask的fork/join
- 7.9 ForkJoinPool的優雅關閉

第8章 CompletableFuture
從JDK 8開始,在Concurrent包中提供了一個強大的異步編程工具CompletableFuture,在JDK8之前,異步編程可以通過執行緒池和Future來實作,但功能還不夠強大,CompletableFuture的出現,使Java的異步編程能力向前邁進了一大步,在探討CompletableFuture的原理之前,先詳細看一下CompletableFuture的用法,從這些用法中,可以看到相較之前的Future有哪些能力得到了提升,
- 8.1 CompletableFuture用法
- 8.2 四種任務原型
- 8.3 CompletionStage介面
- 8.4 CompletableFuture內部原理
- 8.5 任務的網狀執行:有向無環圖
- 8.6 allOf內部的計算圖分析

由于文章篇幅原因,完整檔案不能全部上傳;這里只能上傳部分,有需要的朋友可以關注轉發一下后,私聊我:“666”即可免費獲取到

專家推薦
軟體架構設計:大型網站技術架構與業務架構融合之道

這兩份阿里大牛撰寫的【軟體架構設計:大型網站技術架構與業務架構融合之道】+【Java并發實作原理:JDK原始碼剖析】兩份資料一共641頁,因為內容實在是太多了,咱們在這里就不做過多的介紹啦,需要完整版的朋友,可以一鍵三連此文,“加我VX小助理即可免費獲取到”!

軟體架構設計:大型網站技術架構與業務架構融合之道:目錄如下




轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/221127.html
標籤:其他
