Java高并發(fā)編程詳解:深入理解并發(fā)核心庫
定 價:99 元
叢書名:Java核心技術(shù)系列
- 作者:汪文君
- 出版時間:2020/6/1
- ISBN:9787111657705
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP312.8
- 頁碼:0
- 紙張:
- 版次:
- 開本:16開
本書分了四個部分,第壹部分詳細講解JDK高并發(fā)核心庫,包括JDK1.8、JDK1.9對高并發(fā)的支持。第二部分主要講解Actor模型的實現(xiàn)Akka是如何應(yīng)用在高并發(fā)編程環(huán)境中的。第三部分系統(tǒng)講解RxJava以及Reactive的高并發(fā)編程模型。第四部分站拾遺補漏介紹Google Guava、Disruptor等開源框架提供的高并發(fā)解決方案。
推薦序一
推薦序二
推薦序三
推薦序四
前 言
第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 本章總結(jié) 56
第2章 Java并發(fā)包之原子類型詳解 57
2.1 AtomicInteger詳解 58
2.1.1 性能測試對比 58
2.1.2 AtomicInteger的基本用法 61
2.1.3 AtomicInteger內(nèi)幕 66
2.1.4 AtomicInteger總結(jié) 68
2.2 AtomicBoolean詳解 69
2.2.1 AtomicBoolean的基本用法 69
2.2.2 AtomicBoolean內(nèi)幕 71
2.2.3 Try Lock顯式鎖的實現(xiàn) 71
2.2.4 AtomicBoolean總結(jié) 74
2.3 AtomicLong詳解 74
2.4 AtomicReference詳解 76
2.4.1 AtomicReference的應(yīng)用場景 77
2.4.2 AtomicReference的基本用法 83
2.4.3 AtomicReference的內(nèi)幕 84
2.4.4 AtomicReference總結(jié) 86
2.5 AtomicStampedReference詳解 86
2.5.1 CAS算法ABA問題 86
2.5.2 AtomicStampedReference詳解 87
2.5.3 AtomicStampedReference總結(jié) 89
2.6 AtomicArray詳解 89
2.7 AtomicFieldUpdater詳解 90
2.7.1 原子性更新對象屬性 90
2.7.2 注意事項 91
2.7.3 AtomicFieldUpdater總結(jié) 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總結(jié) 100
2.9 本章總結(jié) 100
第3章 Java并發(fā)包之工具類詳解 102
3.1 CountDownLatch工具詳解 102
3.1.1 等待所有子任務(wù)結(jié)束 103
3.1.2 CountDownLatch的其他方法及總結(jié) 106
3.2 CyclicBarrier工具詳解 107
3.2.1 等待所有子任務(wù)結(jié)束 107
3.2.2 CyclicBarrier的循環(huán)特性 110
3.2.3 CyclicBarrier的其他方法以及總結(jié) 114
3.2.4 CyclicBarrier VS. CountDownLatch 116
3.3 Exchanger工具詳解 116
3.3.1 一對線程間的數(shù)據(jù)交換 116
3.3.2 Exchanger的方法詳解 121
3.3.3 Exchanger總結(jié) 123
3.4 Semaphore工具詳解 124
3.4.1 Semaphore限制同時在線的用戶數(shù)量 124
3.4.2 使用Semaphore定義try lock 127
3.4.3 Semaphore其他方法詳解 129
3.4.4 擴展Semaphore增強release 135
3.4.5 Semaphore總結(jié) 138
3.5 Phaser工具詳解 138
3.5.1 Phaser的基本用法 138
3.5.2 Phase(階段)以及Phaser方法詳解 144
3.5.3 Phaser層級關(guān)系 148
3.5.4 Phaser總結(jié) 149
3.6 Lock&ReentrantLock詳解 150
3.6.1 Lock及ReentrantLock方法詳解 150
3.6.2 正確使用顯式鎖Lock 152
3.6.3 ReentrantLock VS. Synchronized關(guān)鍵字 158
3.6.4 顯式鎖Lock總結(jié) 164
3.7 ReadWriteLock&ReentrantRead-WriteLock詳解 165
3.7.1 讀寫鎖的基本使用方法 165
3.7.2 讀寫鎖的方法 167
3.7.3 基準測試性能對比 167
3.7.4 讀寫鎖總結(jié) 170
3.8 Condition詳解 171
3.8.1 初識Condition 171
3.8.2 Condition接口方法詳解 174
3.8.3 使用Condition之生產(chǎn)者消費者 177
3.8.4 Condition總結(jié) 181
3.9 StampedLock詳解 181
3.9.1 讀寫鎖的饑餓寫問題 182
3.9.2 StampedLock的使用 183
3.9.3 與其他鎖的性能對比 185
3.9.4 StampedLock總結(jié) 191
3.10 Guava之Monitor詳解 192
3.10.1 Monitor及Guard 192
3.10.2 Monitor的其他方法 194
3.10.3 Monitor總結(jié) 194
3.11 Guava之RateLimiter詳解 194
3.11.1 RateLimiter的基本使用 195
3.11.2 RateLimiter的限流操作——漏桶算法 196
3.11.3 令牌環(huán)桶算法 201
3.11.4 RateLimiter總結(jié) 204
3.12 本章總結(jié) 204
第4章 Java并發(fā)包之并發(fā)容器詳解 205
4.1 鏈表 206
4.1.1 基本的鏈表 206
4.1.2 優(yōu)先級鏈表 210
4.1.3 跳表(SkipList) 213
4.1.4 鏈表總結(jié) 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總結(jié) 236
4.3 ConcurrentQueue(并發(fā)隊列) 237
4.3.1 并發(fā)隊列的性能 239
4.3.2 并發(fā)隊列在使用中需要注意的問題 241
4.3.3 并發(fā)隊列總結(jié) 245
4.4 ConcurrentMap(并發(fā)映射) 245
4.4.1 ConcurrentHashMap簡介 245
4.4.2 ConcurrentSkipListMap簡介 247
4.4.3 并發(fā)映射總結(jié) 247
4.5 寫時拷貝算法(Copy On Write) 248
4.5.1 CopyOnWrite讀實現(xiàn)操作分析 249
4.5.2 CopyOnWrite寫實現(xiàn)操作分析 249
4.5.3 CopyOnWrite總結(jié) 250
4.6 高并發(fā)無鎖(Lock Free)數(shù)據(jù)結(jié)構(gòu)的實現(xiàn) 250
4.6.1 高并發(fā)無鎖鏈表的實現(xiàn) 250
4.6.2 Lock Free數(shù)據(jù)結(jié)構(gòu)的測試 253
4.6.3 本節(jié)總結(jié) 255
4.7 本章總結(jié) 255
第5章 Java并發(fā)包之ExecutorService詳解 256
5.1 Executor&ExecutorService詳解 256
5.1.1 ThreadPoolExecutor詳解 257
5.1.2 ScheduledExecutorService詳解 265
5.1.3 關(guān)閉ExecutorService 271
5.1.4 Executors詳解 273
5.1.5 ExecutorService總結(jié) 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總結(jié) 284
5.3 ForkJoinPool 詳解 284
5.3.1 Fork/Join Framework介紹 284
5.3.2 ForkJoinTask詳解 285
5.3.3 ForkJoinPool總結(jié) 289
5.4 CompletionService詳解 289
5.4.1 ExecutorService執(zhí)行批量任務(wù)的缺陷 289
5.4.2 CompletionService詳解 291
5.4.3 CompletionService總結(jié) 294
5.5 CompletableFuture詳解 294
5.5.1 CompletableFuture的基本用法 294
5.5.2 任務(wù)的異步運行 296
5.5.3 異步任務(wù)鏈 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總結(jié) 300
5.6 本章總結(jié) 301
第6章 Java Streams詳解 302
6.1 Stream介紹及其基本操作 302
6.1.1 如何創(chuàng)建Stream 303
6.1.2 Stream之Intermediate操作 306
6.1.3 Stream之Terminal操作 312
6.1.4 NumericStream詳解 317
6.1.5 Stream總結(jié) 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總結(jié) 336
6.3 Parallel Stream詳解 337
6.3.1 并行流Parallel Stream 337
6.3.2 Spliterator 詳解 340
6.3.3 Spliterator總結(jié) 343
6.4 本章總結(jié) 344
第7章 Metrics(Powerful Toolkit For Measure) 345
7.1 Metrics快速入門 345
7.1.1 如何監(jiān)控度量應(yīng)用程序 345
7.1.2 Metrics環(huán)境搭建 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 本章總結(jié) 396