Java 高並發編程詳解:深入理解並發核心庫

汪文君 著

  • 出版商: 機械工業
  • 出版日期: 2020-06-01
  • 售價: $594
  • 貴賓價: 9.5$564
  • 語言: 簡體中文
  • 頁數: 398
  • 裝訂: 平裝
  • ISBN: 7111657705
  • ISBN-13: 9787111657705

立即出貨

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

商品描述

本書的主要內容和特色:
由淺入深、循序漸進地介紹Java高並發核心庫的精髓,幫助讀者掌握相關內容的技術細節。
內容講解以真實問題為導向,層層遞進,環環緊扣,詳細闡述每一個解決方案的來龍去脈。
大量的實際案例,原理剖析和實戰代碼相結合,讓讀者能夠更加清晰深入地理解每一個技術細節的用法和實用技巧。
詳細介紹Java微基準測試工具集JMH與平臺級性能指標數據度量工具Metrics的使用方法,幫助讀者快速開發出高效、健壯的並發應用程序。
本書共包含四大部分。
第一部分(第1章)詳細介紹了JMH微基準測試工具的使用細節。該工具是由Oracle JVM開發團隊相關成員開發的,開發者借助它能夠瞭解自己編寫的程序代碼以及程序在運行期的精確性能表現。在本書的其他章節對API之間的性能進行對比時,主要也是依賴該工具,因此在學習本書的其他章節時,最好能夠掌握該部分內容。強烈推薦開發者將JMH納入自己日常的“兵器庫”中,以便能夠隨時隨地使用。
第二部分(第2~5章)主要圍繞Java並發包展開,內容包括:Java的原子類型及其底層原理(第2章);Java的並發工具集(第3章),其中還穿插了Google Guava的部分內容;Java的並發容器(第4章),包括阻塞隊列BlockingQueue和並發容器等內容;Java的ExecutorService(第5章),以及Future家族成員的詳解。
第三部分(第6章)主要介紹自Java 8 引入的Stream,並且重點解釋了具備高並發能力的並行流原理,以及如何自定義並行流等相關內容。
第四部分(第7章)深入講解了Metrics。作為一個比較小巧的度量工具集,Metrics目前已經成為事實上的度量標準,在很多開源軟件、框架和平臺中都能看到對它的使用,比如Apache的Kafka、Spark、Storm、Spring Cloud等都是使用Metrics作為系統運行性能指標收集的手段。

作者簡介

汪文君
某外企数据服务中心技术经理、技术专家,目前专注于实时数据data pipeline平台的构建与架构,以及部门内部DevOps的建设。对团队管理、项目管理有着自己独到的见解。在加入该公司之前曾拥有多年的移动网关通信研发经验,以及移动互联网、云计算、B2C电子商务平台等架构的开发经验。热衷于技术分享,善于锤炼技术细节,目前已录制20余套技术视频,在互联网上得到广泛传播。另著有《Java高并发编程详解:多线程与架构设计》,该书被机械工业出版社华章公司评选为2018年度十佳图书之一。

目錄大綱

推薦序一
推薦序二
推薦序三
推薦序四
前  言
第1章 JMH 1
1.1 JMH簡介 1
1.2 JMH快速入門 1
1.2.1 用main方法進行測試 1
1.2.2 用JMH進行微基準測試 3
1.3 JMH的基本用法 6
1.3.1 @Benchmark標記基準測試方法 7
1.3.2 Warmup以及Measurement 8
1.3.3 四大BenchmarkMode 10
1.3.4 OutputTimeUnit 14
1.3.5 三大State的使用 14
1.3.6 @Param的妙用 19
1.3.7 JMH的測試套件(Fixture) 23
1.3.8 CompilerControl 26
1.4 編寫正確的微基準測試以及高級用法 27
1.4.1 編寫正確的微基準測試用例 28
1.4.2 一些高級的用法 38
1.5 JMH的Profiler 45
1.5.1 StackProfiler 45
1.5.2 GcProfiler 47
1.5.3 ClassLoaderProfiler 51
1.5.4 CompilerProfiler 54
1.6 本章總結 56
第2章 Java並發包之原子類型詳解 57
2.1 AtomicInteger詳解 58
2.1.1 性能測試對比 58
2.1.2 AtomicInteger的基本用法 61
2.1.3 AtomicInteger內幕 66
2.1.4 AtomicInteger總結 68
2.2 AtomicBoolean詳解 69
2.2.1 AtomicBoolean的基本用法 69
2.2.2 AtomicBoolean內幕 71
2.2.3 Try Lock顯式鎖的實現 71
2.2.4 AtomicBoolean總結 74
2.3 AtomicLong詳解 74
2.4 AtomicReference詳解 76
2.4.1 AtomicReference的應用場景 77
2.4.2 AtomicReference的基本用法 83
2.4.3 AtomicReference的內幕 84
2.4.4 AtomicReference總結 86
2.5 AtomicStampedReference詳解 86
2.5.1 CAS算法ABA問題 86
2.5.2 AtomicStampedReference詳解 87
2.5.3 AtomicStampedReference總結 89
2.6 AtomicArray詳解 89
2.7 AtomicFieldUpdater詳解 90
2.7.1 原子性更新對象屬性 90
2.7.2 註意事項 91
2.7.3 AtomicFieldUpdater總結 93
2.8 sun.misc.Unsafe詳解 93
2.8.1 如何獲取Unsafe 94
2.8.2 JNI、Java和C/C++混合編程 95
2.8.3 危險的Unsafe 98
2.8.4 sun.misc.Unsafe總結 100
2.9 本章總結 100
第3章 Java並發包之工具類詳解 102
3.1 CountDownLatch工具詳解 102
3.1.1 等待所有子任務結束 103
3.1.2 CountDownLatch的其他方法及總結 106
3.2 CyclicBarrier工具詳解 107
3.2.1 等待所有子任務結束 107
3.2.2 CyclicBarrier的循環特性 110
3.2.3 CyclicBarrier的其他方法以及總結 114
3.2.4 CyclicBarrier VS. CountDownLatch 116
3.3 Exchanger工具詳解 116
3.3.1 一對線程間的數據交換 116
3.3.2 Exchanger的方法詳解 121
3.3.3 Exchanger總結 123
3.4 Semaphore工具詳解 124
3.4.1 Semaphore限制同時在線的用戶數量 124
3.4.2 使用Semaphore定義try lock 127
3.4.3 Semaphore其他方法詳解 129
3.4.4 擴展Semaphore增強release 135
3.4.5 Semaphore總結 138
3.5 Phaser工具詳解 138
3.5.1 Phaser的基本用法 138
3.5.2 Phase(階段)以及Phaser方法詳解 144
3.5.3 Phaser層級關系 148
3.5.4 Phaser總結 149
3.6 Lock&ReentrantLock詳解 150
3.6.1 Lock及ReentrantLock方法詳解 150
3.6.2 正確使用顯式鎖Lock 152
3.6.3 ReentrantLock VS. Synchronized關鍵字 158
3.6.4 顯式鎖Lock總結 164
3.7 ReadWriteLock&ReentrantRead-WriteLock詳解 165
3.7.1 讀寫鎖的基本使用方法 165
3.7.2 讀寫鎖的方法 167
3.7.3 基準測試性能對比 167
3.7.4 讀寫鎖總結 170
3.8 Condition詳解 171
3.8.1 初識Condition 171
3.8.2 Condition接口方法詳解 174
3.8.3 使用Condition之生產者消費者 177
3.8.4 Condition總結 181
3.9 StampedLock詳解 181
3.9.1 讀寫鎖的飢餓寫問題 182
3.9.2 StampedLock的使用 183
3.9.3 與其他鎖的性能對比 185
3.9.4 StampedLock總結 191
3.10 Guava之Monitor詳解 192
3.10.1 Monitor及Guard 192
3.10.2 Monitor的其他方法 194
3.10.3 Monitor總結 194
3.11 Guava之RateLimiter詳解 194
3.11.1 RateLimiter的基本使用 195
3.11.2 RateLimiter的限流操作——漏桶算法 196
3.11.3 令牌環桶算法 201
3.11.4 RateLimiter總結 204
3.12 本章總結 204
第4章 Java並發包之並發容器詳解 205
4.1 鏈表 206
4.1.1 基本的鏈表 206
4.1.2 優先級鏈表 210
4.1.3 跳錶(SkipList) 213
4.1.4 鏈表總結 221
4.2 BlockingQueue(阻塞隊列) 221
4.2.1 ArrayBlockingQueue 222
4.2.2 PriorityBlockingQueue 226
4.2.3 LinkedBlockingQueue 228
4.2.4 DelayQueue 228
4.2.5 SynchronousQueue 231
4.2.6 LinkedBlockingDeque 233
4.2.7 LinkedTransferQueue 234
4.2.8 BlockingQueue總結 236
4.3 ConcurrentQueue(並發隊列) 237
4.3.1 並發隊列的性能 239
4.3.2 並發隊列在使用中需要註意的問題 241
4.3.3 並發隊列總結 245
4.4 ConcurrentMap(並發映射) 245
4.4.1 ConcurrentHashMap簡介 245
4.4.2 ConcurrentSkipListMap簡介 247
4.4.3 並發映射總結 247
4.5 寫時拷貝算法(Copy On Write) 248
4.5.1 CopyOnWrite讀實現操作分析 249
4.5.2 CopyOnWrite寫實現操作分析 249
4.5.3 CopyOnWrite總結 250
4.6 高並發無鎖(Lock Free)數據結構的實現 250
4.6.1 高並發無鎖鏈表的實現 250
4.6.2 Lock Free數據結構的測試 253
4.6.3 本節總結 255
4.7 本章總結 255
第5章 Java並發包之ExecutorService詳解 256
5.1 Executor&ExecutorService詳解 256
5.1.1 ThreadPoolExecutor詳解 257
5.1.2 ScheduledExecutorService詳解 265
5.1.3 關閉ExecutorService 271
5.1.4 Executors詳解 273
5.1.5 ExecutorService總結 276
5.2 Future和Callback 277
5.2.1 Future詳解 277
5.2.2 ExecutorService與Future 280
5.2.3 Future的不足之處 282
5.2.4 Google Guava的Future 282
5.2.5 Future總結 284
5.3 ForkJoinPool 詳解 284
5.3.1 Fork/Join Framework介紹 284
5.3.2 ForkJoinTask詳解 285
5.3.3 ForkJoinPool總結 289
5.4 CompletionService詳解 289
5.4.1 ExecutorService執行批量任務的缺陷 289
5.4.2 CompletionService詳解 291
5.4.3 CompletionService總結 294
5.5 CompletableFuture詳解 294
5.5.1 CompletableFuture的基本用法 294
5.5.2 任務的異步運行 296
5.5.3 異步任務鏈 296
5.5.4 合並多個Future 298
5.5.5 多Future的並行計算 299
5.5.6 錯誤處理 299
5.5.7 JDK 9對CompletableFuture的進一步支持 300
5.5.8 CompletableFuture總結 300
5.6 本章總結 301
第6章 Java Streams詳解 302
6.1 Stream介紹及其基本操作 302
6.1.1 如何創建Stream 303
6.1.2 Stream之Intermediate操作 306
6.1.3 Stream之Terminal操作 312
6.1.4 NumericStream詳解 317
6.1.5 Stream總結 320
6.2 Collector在Stream中的使用 320
6.2.1 初識Collector 321
6.2.2 Collectors用法詳解 324
6.2.3 自定義Collector 335
6.2.4 Collector總結 336
6.3 Parallel Stream詳解 337
6.3.1 並行流Parallel Stream 337
6.3.2 Spliterator 詳解 340
6.3.3 Spliterator總結 343
6.4 本章總結 344
第7章 Metrics(Powerful Toolkit For Measure) 345
7.1 Metrics快速入門 345
7.1.1 如何監控度量應用程序 345
7.1.2 Metrics環境搭建 346
7.2 五大Metric詳解 346
7.2.1 Meter 347
7.2.2 Gauge 349
7.2.3 Counter 360
7.2.4 Histogram 362
7.2.5 Timer 370
7.3 Reporter詳解 372
7.3.1 ConsoleReporter 373
7.3.2 LogReporter 376
7.3.3 JMXReporter 378
7.3.4 CsvReporter 379
7.4 Metrics Plugins 380
7.4.1 Health Check 381
7.4.2 JVM Instrumentation 386
7.5 深入Metrics源碼 387
7.5.1 MetricRegistry如何工作 388
7.5.2 Reporter如何工作 392
7.5.3 拾遺補漏 394
7.6 本章總結 396