隨著移動互聯(lián)網(wǎng)的發(fā)展,幾乎所有主流的互聯(lián)網(wǎng)應(yīng)用都需要應(yīng)對高并發(fā)場景,所以不管是Java初學(xué)者,還是Java開發(fā)老兵,了解和掌握Java高并發(fā)編程的相關(guān)知識都是非常必要的。本書以由淺入深的方式來對Java高并發(fā)編程的相關(guān)知識進行講解,首先是對高并發(fā)的理解、多線程基礎(chǔ)、Java并發(fā)包相關(guān)類的使用與設(shè)計原理進行介紹;然后再拓展講解高并發(fā)系統(tǒng)設(shè)計的相關(guān)原理和涉及的相關(guān)框架、中間件等;最后對流行的Java開源框架的源碼設(shè)計進行分析,以及結(jié)合實現(xiàn)一個簡易版的秒.殺系統(tǒng)來介紹如何基于Java語言實現(xiàn)一個高并發(fā)系統(tǒng),最終達到原理與實踐結(jié)合的目的。
1.內(nèi)容由淺入深,詳略得當(dāng),符合認知規(guī)律
本書在整體內(nèi)容結(jié)構(gòu)方面,依次分為基礎(chǔ)篇、進階篇、拓展篇和實戰(zhàn)篇。通過這種由淺
入深、循序漸進的講解方式,初學(xué)者在對整本書學(xué)習(xí)后能夠掌握 Java 高并發(fā)編程的核心要點。
對于擁有一定經(jīng)驗的工程師來說,則可以根據(jù)自身技術(shù)的掌握情況,有選擇地學(xué)習(xí)相應(yīng)的章節(jié)。
2.豐富的 Java 并發(fā)包和開源框架源碼分析,知其然更知其所以然
本書的定位是讓讀者不只停留在對 Java 并發(fā)包和開源框架相關(guān)核心類用法的掌握上,而且
能夠理解和掌握對應(yīng)類的底層源碼實現(xiàn),從而設(shè)計出更加健壯和高效的代碼,以及在工作中可
以快速定位問題所在。所以本書提供了豐富、詳細的 Java 并發(fā)包和開源框架的源碼設(shè)計與實現(xiàn)
分析,以便讀者能夠知其然更知其所以然。其中 Java 源代碼分析主要是基于 JDK 1.8 版本。
3.分布式、高并發(fā)設(shè)計要點分析,提高實戰(zhàn)能力
接觸過高并發(fā)設(shè)計的工程師都知道,高并發(fā)是繞不開分布式的。因為多線程設(shè)
計只能蕞大限度地提高單臺機器的并發(fā)處理能力,要應(yīng)對海量高并發(fā)請求,單臺機器是遠遠
不夠的。所以在本書的第三部分對分布式設(shè)計的相關(guān)理論、核心設(shè)計要點,以及相關(guān)技
術(shù)框架和中間件進行了分析,以便幫助讀者能夠理解和掌握如何進行企業(yè)級的高并發(fā)設(shè)
計,提高實戰(zhàn)能力。
謝議尊,畢業(yè)于中山大學(xué)軟件工程專業(yè),目前在BAT其中一家擔(dān)任高級開發(fā)工程師,擅長Java高并發(fā)服務(wù)端編程,有著豐富的一線開發(fā)實戰(zhàn)經(jīng)驗。
第1章 高并發(fā)的理解 2
1.2 高并發(fā)的應(yīng)對策略 .......7
1.3 小結(jié) ...... 12
第2章 操作系統(tǒng)多線程基礎(chǔ) 13
2.1 線程概念 . 14
2.2 多線程的挑戰(zhàn) ..........20
2.3 小結(jié) ......24
第3章 Java 多線程基礎(chǔ) 25
3.1 線程的使用 .............26
3.2 線程的狀態(tài)與狀態(tài)轉(zhuǎn)換 ..............34
3.3 線程安全 .40
3.4 小結(jié) ......63
第4章 Executor 線程池框架 66
4.1 Executor 線程池框架設(shè)計概述 ...67
4.2 Executor 接口與 ExecutorService 接口 ...68
4.3 ThreadPoolExecutor 線程池 ..69
4.4 Future 任務(wù)的異步結(jié)果 ............83
4.5 ScheduledExecutorService 任務(wù)周期性執(zhí)行 ...........92
4.6 Executors 線程池創(chuàng)建工具 ......96
4.7 ForkJoin 任務(wù)分解與并行執(zhí)行框架 .......... 100
4.8 小結(jié) .... 111
第5章 Java 線程安全字典 112
5.1 Hashtable 全同步 Map ......... 113
5.2 SynchronizedMap 同步器 Map ............ 116
5.3 ConcurrentHashMap 并發(fā) Map .......... 119
5.4 ConcurrentSkipListMap 有序并發(fā) Map . 142
5.5 小結(jié) .... 146
第6章 Java 并發(fā)隊列 147
6.1 BlockingQueue 阻塞先入先出隊列 ......... 148
6.2 BlockingDeque 阻塞先入先出雙端隊列 .... 161
6.3 ConcurrentLinkedQueue 并發(fā)隊列 ...... 165
6.4 CopyOnWriteArrayList 寫時拷貝列表 .... 172
6.5 小結(jié) .... 180
第7章 AQS 線程同步器 181
7.1 AQS 線程同步器基礎(chǔ) ............. 182
7.2 ReentrantLock 可重入鎖 ...... 191
7.3 CountDownLatch 倒計時同步器 ............ 203
7.4 CyclicBarrier 循環(huán)柵欄同步器 209
7.5 Semaphore 信號量同步器 ..... 216
7.6 小結(jié) .... 222
第8章 分布式系統(tǒng)設(shè)計理論 224
8.1 系統(tǒng)架構(gòu)演進 ........ 225
8.2 分布式理論 ........... 231
8.3 高并發(fā) .. 234
8.4 負載均衡 .............. 235
8.5 緩存機制 .............. 239
8.6 異步處理 .............. 243
8.7 高可用 .. 244
8.8 可靠性與容錯機制 ... 248
8.9 小結(jié) .... 253
第9章 Java 分布式應(yīng)用設(shè)計核心技術(shù) 254
9.1 分布式服務(wù)調(diào)用 RPC 框架 ...... 255
9.2 分布式消息隊列 ..... 270
9.3 AMQP 協(xié)議實現(xiàn):RabbitMQ 270
9.4 海量消息處理:Kafka ............ 281
9.5 Redis 消息隊列與發(fā)布訂閱 ..... 286
9.6 分布式緩存 ........... 292
9.7 分布式鎖 ..............299
9.8 小結(jié) .... 304
第 10 章 開源框架高并發(fā)源碼分析 306
10.1 Dubbo 高并發(fā)編程實戰(zhàn) ........ 307
10.2 Netty 與 Tomcat 的線程模型 . 326
10.3 小結(jié) ... 348
第 11 章 秒殺系統(tǒng)設(shè)計分析 349
11.1 秒殺系統(tǒng)設(shè)計概述 . 350
11.2 限流機制 ............ 355
11.3 緩存的使用 .......... 358
11.4 分布式鎖的使用 .... 362
11.5 隊列削峰與異步處理 ............. 366
11.6 小結(jié) ... 369