深入理解 Java 高並發編程

黃俊

  • 出版商: 清華大學
  • 出版日期: 2021-11-01
  • 售價: $888
  • 貴賓價: 9.5$844
  • 語言: 簡體中文
  • 頁數: 636
  • 裝訂: 平裝
  • ISBN: 7302591342
  • ISBN-13: 9787302591344
  • 立即出貨 (庫存 < 4)

  • 深入理解 Java 高並發編程-preview-1
  • 深入理解 Java 高並發編程-preview-2
  • 深入理解 Java 高並發編程-preview-3
深入理解 Java 高並發編程-preview-1

買這商品的人也買了...

商品描述

《深入理解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層面的實現流程進行了詳細描述,以幫助讀者在使用這些方法時,知道底層發生了什麽,以及發生異常時如何從容解決問題。

作者簡介

黃俊,專注於研究Java語言,熱點,林努,C語言與細節,架構設計,多線程並發處理,專注於研究高效學習方式。
曾就職於美團、阿里,前新東方業務架構師。

目錄大綱

篇基礎知識儲備
章計算機原理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 英特爾的發展歷史 23
1.3.2 計算機程序的組成 29
1.3.3 計算機的內存管理與內存地址原理 36
1.3.4 計算機程序的執行原理 44
1.4 操作系統概述 52
1.4.1 操作系統的發展歷程和分類 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 傳統操作系統並行控制原理 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 死鎖
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內核序列鎖實現原理 98
2.4.7 Linux內核rcu鎖實現原理100
2.5 Glibc和Pthread庫原理105
2.5.1 C標準、CRT與Glibc 105
2.5.2 LinuxThread與IX、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線程類核心原理與方法137
4.1.1 進入線程138
4.1.2 運行方法 139
4.1.3啟動方法139
4.1.4 停止方法 140
4.1.5 銷毀方法 140
4.1.6 中斷方法141
4.1.7 睡眠方法 142
4.1.8 加入方法142
4.1.9 線程方法使用與線程狀態轉換 143
4.2 Runnable與Callable的使用144
4.3 未來接口的使用 146
4.4 Promise接口的使用 147
4.5 volatile關鍵字的使用 147
4.6 同步關鍵字的使用 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 執行方法的實現原理 159
5.2.4 關機方法實現原理1
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 關機實現與原理 178
5.4 構建一個線程池179
5.4.1 固定線程池 179
5.4.2 SingleThreadExecutor 179
5.4.3 緩存線程池 180
5.4.4 SingleThreadScheduledExecutor 180
5.4.5 調度線程池 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信號工作實現原理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掃描竊取算法原理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 關閉原理211
5.5.21 ForkJoinPool awaitTermination 原理214
5.5.22 ForkJoinPool 總結215
5.5.23遞歸操作原理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. CompletableFuture tComplete 原理 238
5.6.5 CompletableFuture 完成原理239
5.6.6 CompletableFuture allOf 原理246
5.7 小結 253
第6章JUC之同步結構 254
6.1 同步結構基礎實現原理 254
6.1.1 鎖接口254
6.1.2 條件接口255
6.1.3 LockSupport 類 255
6.1.4 AQS類256
6.1.5 接口接口 259
6.2 ReentrantLock的實現與原理262
6.3 ReentrantReadWriteLock實現與原理2
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實現與原理3
6.23 Phaser實現與原理372
6.24 小結 380
第7章Java NIO詳解382
7.1 NIO三劍客之緩衝器原理382
7.1.1 緩衝器 383
7.1.2 字節緩衝區 385
7.1.3 堆字節緩衝區 394
7.1.4 映射字節緩衝區 396
7.1.5 DirectByteBuffer 398
7.2 NIO三劍客之頻道原理403
7.2.1 403頻道
7.2.2 文件通道 404
7.2.3 套接字通道 408
7.2.4 ServerSocketChannel 412
7.2.5 數據報通道 415
7.3 NIO三劍客之Selector原理420
7.3.1 選擇器 420
7.3.2 選擇鍵 423
7.4 小結431
第2篇深入Java並行原理
第8章JVM同步與易失性原理詳解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 公園方法實現原理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 DoubleAccculator的實現與原理457
8.2.14 DoubleAdder的實現與原理465
8.2.15 LongAccculator的實現與原理466
8.2.16 LongAdder的實現與原理467
8.3 volatile原理分析469
8.3.1 JVM 內存模型 469
8.3.2 Java中發生的原則469
8.3.3 Java 中的揮發性數據 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中易變的對於禁止重排序的實現原理477
8.3.8 從Pthread線程庫分析C的volatile內存480
8.3.9 JMM和CPU模型原理484
8.4 同步源碼分析 488
8.4.1 Java對像頭原理488
8.4.2 _monitorenter 獲取鎖過程原理490
8.4.3 _monitoret釋放鎖過程原理513
8.4.4 Object.wait等待過程原理518
8.45 Object.notify.喚醒過程原理522
8.4. Object.notifyAll 6 喚醒全部過程原理 524
8.4.7 Object.hashcode 獲取哈希碼過程原理526
8.5 小結 530
第9章AQS源碼詳解531
9.1 比較交換原理詳解531
9.1.1 比較和交換概念 531
9.1.2 Java語言比較和交換實現原理531
9.1.3 Hotspot虛擬實現機語對比交換532
9.1.4 大概比較和交換實現原理533
9.2 AQS核心之節點類533
9.3 AQS核心之頭與尾變量534
9.4 AQS核心之狀態535
9.5 AQS核心之獲取過程原理536
9.6 AQS核心之獲取可中斷過程原理540
9.7 AQS核心之獲取共享過程原理541
9.8 AQS核心之獲取共享可中斷過程原理544
9.9 AQS核心之釋放過程原理544
9.10 AQS核心之發布共享過程原理545
9.11 AQS核心之條件變量原理545
9.11.1 ConditionObject 類 545
9.11.2 await Node等作原理546
9.11.3 信號節點喚醒操作原理550
9.11.4 相關工具方法詳述 552
9.12小結553
0章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線程類源碼解析 584
10.3 Java線程啟動原理解析585
10.4 Java線程停止原理解析592
10.5 Java線程中斷原理解析594
10.6 Java Thread isInterrupted原理解析595
10.7 Java線程睡眠原理解析596
10.8 Java Thread Yield原理解析598
10.9 Java線程掛起原理解析599
10.10 Java線程恢復原理解析601
10.11 JVM 線程層級結構 601
10.12 JVM互斥體原理605
10.12.1 ParkEvent與Parker原理606
10.12.2 texLocker 原理 614
10.12.3 texLockerEx 原理 615
10.12.4 tex和監控原理616
10.13 小結 623