內容簡介
《深入理解Java高並發編程》致力於介紹Java高並發編程方面的知識。由於多執行緒處理涉及的知識內容十分豐富,因此介紹時必須從Java層面的講解一直深入到底層的知識講解。為了幫助讀者輕鬆閱讀本書並掌握其中知識,本書做了大量基礎知識的鋪墊。在第1篇基礎知識儲備中,主要介紹計算機原理、並發基礎、常見語言的執行緒實現、Java並發入門、JUC之Java執行緒池、JUC之同步結構、Java NIO詳解等內容。在第2篇深入Java並發原理中,詳細介紹了JUC包中所有使用的原子類的原理與源碼實現;非常關鍵且容易出錯的volatile關鍵字的原理,從Java、JVM、C、彙編、CPU層面對其進行詳細講解;synchronized在JVM中獲取鎖和釋放鎖的流程;JUC包的核心結構——AQS的原理與源碼實現,通過逐方法、逐行的解釋,幫助讀者徹底掌握AQS中提供的獲取鎖、釋放鎖、條件變數等操作的實現與原理。最後,詳細介紹了JVM中JNI的實現原理,將Java Thread對象中的所有方法在JVM層面的實現流程進行了詳細描述,以幫助讀者在使用這些方法時,知道底層發生了什麼,以及發生異常時如何從容解決問題。
目錄
第1篇 基礎知識儲備
第1章 計算機原理 2
1.1 彙編語言基礎 2
1.1.1 彙編語言與機器語言 2
1.1.2 常見的暫存器 3
1.1.3 常見操作語句 6
1.1.4 內聯彙編 6
1.1.5 常見助記符 9
1.2 C語言基礎 12
1.2.1 基本數據類型 12
1.2.2 結構體原理 13
1.2.3 指針原理 19
1.2.4 指針與數組原理 21
1.3 計算機組成原理基礎 23
1.3.1 intel的發展歷史 23
1.3.2 電腦程式的組成 29
1.3.3 計算機的記憶體管理與記憶體地址原理 36
1.3.4 電腦程式的執行原理 44
1.4 OS概述 52
1.4.1 OS的發展歷程和分類 53
1.4.2 常用的OS系統 56
1.5 小結 57
第2章 並發基礎 58
2.1 並發與並行原理 58
2.1.1 並發 58
2.1.2 並行 59
2.1.3 並發與並行帶來的問題 59
2.2 傳統OS並發控制原理 60
2.2.1 P-V原語 60
2.2.2 信號量 61
2.2.3 互斥量 62
2.2.4 自旋鎖 62
2.2.5 讀寫鎖 63
2.2.6 死鎖 64
2.3 CPU並發控制原理 66
2.3.1 中斷控制 66
2.3.2 快取一致性協定 67
2.3.3 系統屏障 69
2.3.4 匯流排/快取鎖 73
2.4 Linux核心並發控制原理 73
2.4.1 Linux核心信號量與P-V原語實現原理 74
2.4.2 Linux核心互斥量實現原理 80
2.4.3 Linux核心自旋鎖實現原理 80
2.4.4 Linux核心讀寫鎖實現原理 84
2.4.5 Linux核心中斷控制與核心搶占原理 91
2.4.6 Linux核心seq鎖實現原理 98
2.4.7 Linux核心rcu鎖實現原理 100
2.5 Glibc和Pthread庫原理 105
2.5.1 C標準、CRT與Glibc 105
2.5.2 LinuxThread與POSIX、NGTP、NPTL 107
2.5.3 NPTL常用函式與實現原理 108
2.6 小結 131
第3章 常見語言的執行緒實現 132
3.1 彙編語言多執行緒實現 132
3.2 C語言多執行緒實現 133
3.3 Go語言多執行緒實現 134
3.4 Python語言多執行緒實現 135
3.5 Java語言多執行緒實現 135
3.6 不同語言並發異同與知識推理 136
3.7 小結 136
第4章 Java並發入門 137
4.1 Java Thread類核心原理與方法 137
4.1.1 走進Thread 138
4.1.2 run方法 139
4.1.3 start方法 139
4.1.4 stop方法 140
4.1.5 destory方法 140
4.1.6 interrupt方法 141
4.1.7 sleep方法 142
4.1.8 join方法 142
4.1.9 Thread方法使用與執行緒狀態轉換 143
4.2 Runnable與Callable的使用 144
4.3 Future接口的使用 146
4.4 Promise接口的使用 147
4.5 volatile關鍵字的使用 147
4.6 synchronized關鍵字的使用 148
4.7 小結 149
第5章 JUC之Java執行緒池 150
5.1 Executor與ExecutorService詳解 150
5.1.1 Executor接口原理 150
5.1.2 ExecutorService接口原理 151
5.2 ThreadPoolExecutor詳解 156
5.2.1 ThreadPoolExecutor例子 156
5.2.2 ThreadPoolExecutor核心數據結構 156
5.2.3 execute方法的實現原理 159
5.2.4 shutdown方法實現原理 164
5.2.5 awaitTermination方法的實現原理 166
5.2.6 shutdownNow方法的實現原理 167
5.3 ScheduledThreadPoolExecutor詳解 168
5.3.1 ScheduledThreadPoolExecutor例子 169
5.3.2 ScheduledExecutorService接口 170
5.3.3 ScheduledThreadPoolExecutor核心變數 170
5.3.4 scheduleAtFixedRate實現與原理 172
5.3.5 ScheduledFutureTask實現與原理 176
5.3.6 scheduleWithFixedDelay實現與原理 177
5.3.7 shutdown實現與原理 178
5.4 構建不同執行緒池 179
5.4.1 FixedThreadPool 179
5.4.2 SingleThreadExecutor 179
5.4.3 CachedThreadPool 180
5.4.4 SingleThreadScheduledExecutor 180
5.4.5 ScheduledThreadPool 181
5.5 ForkJoinPool詳解 181
5.5.1 ForkJoinPool核心數據結構與方法 181
5.5.2 ForkJoinPool externalPush實現原理 185
5.5.3 ForkJoinPool externalSubmit實現原理 185
5.5.4 ForkJoinPool signalWork實現原理 187
5.5.5 ForkJoinPool tryAddWorker實現原理 188
5.5.6 ForkJoinPool createWorker實現原理 189
5.5.7 ForkJoinPool registerWorker實現原理 189
5.5.8 ForkJoinPool ForkJoinWorkerThread執行原理 190
5.5.9 ForkJoinPool scan竊取算法原理 191
5.5.10 ForkJoinPool runTask原理 194
5.5.11 ForkJoinPool awaitWork原理 196
5.5.12 ForkJoinPool切割子任務 197
5.5.13 ForkJoinTask doExec原理 198
5.5.14 ForkJoinTask fork原理 202
5.5.15 ForkJoinTask join原理 202
5.5.16 ForkJoinPool awaitJoin原理 204
5.5.17 ForkJoinPool tryRemoveAndExec原理 205
5.5.18 ForkJoinPool helpStealer原理 207
5.5.19 ForkJoinPool tryCompensate原理 209
5.5.20 ForkJoinPool shutdown原理 211
5.5.21 ForkJoinPool awaitTermination原理 214
5.5.22 ForkJoinPool總結 215
5.5.23 RecursiveAction原理 216
5.5.24 RecursiveTask原理 217
5.5.25 CountedCompleter原理 218
5.6 CompletableFuture詳解 234
5.6.1 CompletableFuture 概念與例子 234
5.6.2 CompletableFuture CompletionStage接口 235
5.6.3 CompletableFuture runAsync原理 237
5.6.4 CompletableFuture postComplete原理 238
5.6.5 CompletableFuture Completion原理 239
5.6.6 CompletableFuture allOf原理 246
5.7 小結 253
第6章 JUC之同步結構 254
6.1 同步結構基礎實現原理 254
6.1.1 Lock接口 254
6.1.2 Condition接口 255
6.1.3 LockSupport類 255
6.1.4 AQS類 256
6.1.5 佇列核心接口 259
6.2 ReentrantLock實現與原理 262
6.3 ReentrantReadWriteLock實現與原理 264
6.4 Semapher實現與原理 271
6.5 FutureTask實現與原理 273
6.6 ArrayBlockingQueue實現與原理 278
6.7 LinkedBlockingQueue實現與原理 281
6.8 LinkedBlockingDeque實現與原理 284
6.9 LinkedTransferQueue實現與原理 288
6.10 SynchronousQueue實現與原理 295
6.11 PriorityBlockingQueue實現與原理 305
6.12 ConcurrentLinkedQueue實現與原理 310
6.13 ConcurrentLinkedDeque實現與原理 315
6.14 ThreadLocalRandom實現與原理 326
6.15 CopyOnWriteArrayList實現與原理 329
6.16 CopyOnWriteArraySet實現與原理 331
6.17 CountDownLatch實現與原理 333
6.18 CyclicBarrier實現與原理 335
6.19 ConcurrentHashMap實現與原理 338
6.20 ConcurrentSkipListMap實現與原理 354
6.21 ConcurrentSkipListSet實現與原理 363
6.22 Exchanger實現與原理 364
6.23 Phaser實現與原理 372
6.24 小結 380
第7章 Java NIO詳解 382
7.1 NIO三劍客之Buffer原理 382
7.1.1 Buffer 383
7.1.2 ByteBuffer 385
7.1.3 HeapByteBuffer 394
7.1.4 MappedByteBuffer 396
7.1.5 DirectByteBuffer 398
7.2 NIO三劍客之Channel原理 403
7.2.1 Channel 403
7.2.2 FileChannel 404
7.2.3 SocketChannel 408
7.2.4 ServerSocketChannel 412
7.2.5 DatagramChannel 415
7.3 NIO三劍客之Selector原理 420
7.3.1 Selector 420
7.3.2 SelectionKey 423
7.4 小結 431
第2篇 深入Java並發原理
第8章 JVM synchronized與volatile原理詳解 434
8.1 JVM源碼分析之Unsafe類 434
8.1.1 compareAndSwap類方法實現原理 435
8.1.2 getIntVolatile方法實現原理 435
8.1.3 putIntVolatile方法實現原理 435
8.1.4 putOrderedInt方法實現原理 436
8.1.5 park方法實現原理 437
8.1.6 loadFence方法實現原理 438
8.1.7 storeFence方法實現原理 438
8.1.8 fullFence方法 438
8.2 JVM源碼分析之原子類 439
8.2.1 AtomicInteger實現與原理 439
8.2.2 AtomicBoolean實現與原理 440
8.2.3 AtomicIntegerArray實現與原理 441
8.2.4 AtomicIntegerFieldUpdater實現與原理 443
8.2.5 AtomicLong實現與原理 445
8.2.6 AtomicLongArray實現與原理 446
8.2.7 AtomicLongFieldUpdater實現與原理 447
8.2.8 AtomicMarkableReference實現與原理 450
8.2.9 AtomicStampedReference實現與原理 451
8.2.10 AtomicReference實現與原理 454
8.2.11 AtomicReferenceArray實現與原理 454
8.2.12 AtomicReferenceFieldUpdater實現與原理 455
8.2.13 DoubleAccumulator實現與原理 457
8.2.14 DoubleAdder實現與原理 465
8.2.15 LongAccumulator實現與原理 466
8.2.16 LongAdder實現與原理 467
8.3 volatile原理分析 469
8.3.1 JVM記憶體模型 469
8.3.2 Java中happens-before原則 469
8.3.3 Java中Volatile語義 470
8.3.4 Java中Volatile位元組碼原理 472
8.3.5 JVM中putstatic和getstatic位元組碼原理 473
8.3.6 C/C++中的volatile原理 475
8.3.7 JVM中volatile對於禁止重排序的實現原理 477
8.3.8 從Pthread執行緒庫分析C的volatile語義 480
8.3.9 JMM和CPU模型原理 484
8.4 synchronized源碼分析 488
8.4.1 Java對象頭原理 488
8.4.2 _monitorenter 獲取鎖過程原理 490
8.4.3 _monitorexit 釋放鎖過程原理 513
8.4.4 Object.wait 等待過程原理 518
8.4.5 Object.notify 喚醒過程原理 522
8.4.6 Object.notifyAll 喚醒全部過程原理 524
8.4.7 Object.hashcode 獲取哈希碼過程原理 526
8.5 小結 530
第9章 AQS源碼詳解 531
9.1 compare and swap原理詳解 531
9.1.1 compare and swap概念 531
9.1.2 Java層面compare and swap實現原理 531
9.1.3 Hotspot虛擬機層面compare and swap實現原理 532
9.1.4 彙編層面compare and swap實現原理 533
9.2 AQS核心之Node類 533
9.3 AQS核心之head和tail變數 534
9.4 AQS核心之state變數 535
9.5 AQS核心之acquire過程原理 536
9.6 AQS核心之acquireInterruptibly過程原理 540
9.7 AQS核心之acquireShared過程原理 541
9.8 AQS核心之acquireSharedInterruptibly過程原理 544
9.9 AQS核心之release過程原理 544
9.10 AQS核心之releaseShared過程原理 545
9.11 AQS核心之條件變數原理 545
9.11.1 ConditionObject類 545
9.11.2 await Node等待操作原理 546
9.11.3 signal Node喚醒操作原理 550
9.11.4 相關工具方法詳述 552
9.12 小結 553
第10章 JVM執行緒原理詳解 554
10.1 JNI詳述 554
10.1.1 JNI概念 554
10.1.2 JVM執行外部動態程式庫原理 556
10.1.3 JVM執行內部動態程式庫原理 578
10.1.4 JNIEnv結構體原理 583
10.2 Java Thread類源碼解析 584
10.3 Java Thread Start原理解析 585
10.4 Java Thread Stop原理解析 592
10.5 Java Thread Interrupt原理解析 594
10.6 Java Thread isInterrupted原理解析 595
10.7 Java Thread Sleep原理解析 596
10.8 Java Thread Yield原理解析 598
10.9 Java Thread Suspend原理解析 599
10.10 Java Thread Resume原理解析 601
10.11 JVM Thread層級結構 601
10.12 JVM互斥體原理 605
10.12.1 ParkEvent與Parker原理 606
10.12.2 MutexLocker原理 614
10.12.3 MutexLockerEx原理 615
10.12.4 Mutex和Monitor原理 616
10.13 小結 623