並發編程
並發編程可選擇的方式有多進程、多線程和多協程。對於Java來說,它既不像C++那樣,在運行中調用Linux的系統API去"fork" 出多個進程:也不像Go那樣,在語言層面原生提供多協程。在Java中, 並發就是多線程模式。對於人腦的認知來說,「代碼一行行串行」當然最容易理解。但在多線程下,多個線程的代碼交叉並行,要訪問互斥資源,要互相通信。作為開發者,需要仔細設計線程之間的互斥與同步,稍不留心,就會寫出非線程安全的代碼。正因此,多線程編程一直是一個被廣泛而深入討論的領域。在JDK 1. 5發布之前,Java只在語言級別上提供一些簡單的線程互斥與同步機制,也就是synchronized關鍵字、wait 與notify.如果遇到複雜的多線程編程場景,就需要開發者基於這些簡單的機制解決複雜的線程同步問題。而從JDK 1. 5開始,並發編程大師Doug Lea奉上了一個系統而全面的並發編程框架一JDK Concurrent包,裡面包含了各種原子操作、線程安全的容器、線程池和異步編程等內容。
下面要介紹的這份筆記就是基於JDK7和JDK8,對整個Concurrent包進行全面的源碼剖析。JDK8中大部分並發功能的實現和JDK7一樣,但新增了一些額外特性。例如CompletableFuture. ConcurrentHashMap的新實現、 StampedLock. LongAdder等。
第1章 多線程基礎
線程的優雅關閉InterruptedException ()函數與interrupt ()函數synchronized關鍵字wait () 與notify ()volatile關鍵字JMM與happen-before內存屏障final關鍵字綜合應用:無鎖編程
第2章 Atomic類
AtomicInteger和AtomicLongAtomicBoolean和AtomicReferenceAtomicStampedReference和AtomicMarkableReferenceAtomicIntegerFieldUpdater、AtomicLongFieldUpdater和AtomicReferenceFieldUpdaterAtomicIntegerArray、AtomicLongArray和Atomic-ReferenceArrayStriped64與LongAdder
第3章 Lock與Condition
互斥鎖讀寫鎖ConditionStampedLock
第4章 同步工具類
SemaphoreCountDownLatchCyclicBarrierExchangerPhaser
第5章 並發容器
BlockingQueueBlockingDequeCopyOnWriteConcurrentLinkedQueue/DequeConcurrentHashMapConcurrentSkipListMap/Set
第6章 線程池與Future
線程池的實現原理線程池的類繼承體系ThreadPoolExectorCallable與FutureScheduledThreadPoolExecutorExecutors工具類
第7章 ForkJoinPool
ForkJoinPool用法核心數據結構工作竊取隊列ForkJoinPool狀態控制Worker線程的阻塞一喚醒機制任務的提交過程分析工作竊取算法:任務的執行過程分析ForkJoinTask的fork/joinForkJoinPool的優雅關閉
第8章 CompletableFuture
CompletableFuture用法四種任務原型CompletionStage接口CompletableFuture內部原理任務的網狀執行:有向無環圖allOf內部的計算圖分析
需要這份並發編程JDK源碼剖析的老哥幫忙點讚轉發加關注小編一下,然後私信【666】即可獲取