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