国内首部Java多线程设计模式原创作品《Java多线程编程实战指南(设计模式篇)》已由电子工业出版社出版。本书从理论到实战,用生活化的实例和通俗易懂的语言全面介绍Java多线程编程的"三十六计"——多线程设计模式。
当当、亚马逊、京东、互动出版网、淘宝等各大书店有售。
【样章】http://viscent.iteye.com/category/328291 【前言】 随着现代CPU的生产工艺从提升CPU主频频率转向多核化,即在一块芯片上集成多个CPU内核(Core),以往那种靠CPU自身处理能力的提升所带来的软件计算性能提升的那种“免费午餐”不复存在。在此背景下,多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。然而,多线程编程并非一个简单地使用多个线程进行编程的数量问题,其又有自身的问题。好比俗话说“一个和尚打水喝,两个和尚挑水喝,三个和尚没水喝”,简单地使用多个线程进行编程可能导致更加糟糕的计算效率。 设计模式相当于软件开发领域的“三十六计”,它为特定背景下反复出现的问题提供了一般性解决方案。多线程相关的设计模式为我们恰当地使用多线程进行编程并达到提升软件服务质量这一目的提供了指引和参考。当然,设计模式不是菜谱,即便是菜谱我们也不能指望照着菜谱做就能做出一道美味可口的菜肴,但我们又不能因此而否认菜谱存在的价值。 可惜的是,国外与多线程编程相关的设计模式书籍多数采用C++作为描述语言,且书中所举的例子又多与应用开发人员的实际工作经历相去甚远。本书作为国内第一本多线程编程相关设计模式的原创书籍,希望能够为Java开发者普及多线程相关的设计模式开一个头。 本书采用Java(JDK 1.6) 语言和UML(Unified Modeling Language)为描述语言,并结合作者多年工作经历的相关实战案例,介绍了多线程环境下常用设计模式的来龙去脉:各个设计模式是什么样的及其典型的实际应用场景、实际应用时需要注意的相关事项以及各个模式的可复用代码实现。 本书第1章对多线程编程基础进行了回顾,虽然该章讲的是基础但重点仍然是强调“实战”。所谓“温故而知新”,有一定多线程编程基础、经验的读者也不妨快速阅读一下本章,说不定有新的收获。 本书第3章到第14章逐一详细讲解了多线程编程相关的12个常用设计模式。针对每个设计模式,相应章节会从以下几个方面进行详细讲解。 模式简介。这部分简要介绍了相应设计模式的由来及其核心思想,以便读者能够快速地对其有个初步认识。 模式的架构。这部分会从静态(类及类与类之间的结构关系)和动态(类与类之间的交互)两个角度对相应设计模式进行详细讲解。模式架构分别使用UML类图(Class Diagram)和序列图(Sequence Diagram)对模式的静态和动态两个方面进行描述。 实战案例解析。在相应设计模式架构的基础上,本部分会给出相关的实战案例并对其进行解析。不同于教科书式的范例,实战案例强调的是“实战”这一背景。因此实战案例解析中,我们会先提出实际案例中我们面临的实际问题,并在此基础上结合相应设计模式讲解相应设计模式是如何解决这些问题的。实战案例解析中我们会给出相关的Java代码,并讲解这些代码与相应设计模式的架构间的对应关系,以便读者进一步理解相应设计模式。为了便于读者进行实验,本书给出的实战案例代码都力求做到可运行。实战案例解析有助于读者进一步理解相应的设计模式,并体验相应设计模式的应用场景。建议读者在阅读这部分时先关注重点,即实战案例中我们要解决哪些问题,相应设计模式又是如何解决这些问题的,实战案例的代码与相应设计模式的架构间的对应关系。而代码中其与设计模式非强相关的细节则可以稍后关注。 模式的评价与实现考量。这部分会对相应设计模式在实现和应用过程中需要注意的一些事项、问题进行讲解,并讨论应用相应设计模式所带来的好处及缺点。该节也会讨论相应设计模式的典型应用场景。 可复用实现代码。这部分给出相应设计模式的可复用实现代码。编写设计模式的可复用代码有助于读者进一步理解相应设计模式及其在实现和应用过程中需要注意的相关事项和问题,也便于读者在实际工作中应用相应设计模式。 Java标准库实例。考虑到Java标准库的API设计过程中已经应用了许多设计模式,本书尽可能地给出相应设计模式在Java API中的应用情况。 相关模式。设计模式不是孤立存在的,一个具体的设计模式往往和其它设计模式之间存在某些联系。这部分会描述相应设计模式与其它设计模式之间存在的关系。这当中可能涉及GOF的设计模式,这类设计模式并不在本书的讨论范围之内。有需要的读者,请自行参考相关书籍。 本书的源码可以从http://github.com/Viscent/javamtp下载或博文视点官网http://www.broadview.com.cn相关图书页面。 【目录】 第1章Java多线程编程实战基础 1
1.1无处不在的线程 1
1.2线程的创建与运行 2
1.3线程的状态与上下文切换 5
1.4线程的监视 7
1.5原子性、内存可见性和重排序——重新认识synchronized和volatile 10
1.6线程的优势和风险 11
1.7多线程编程常用术语 13
第2章设计模式简介 17
2.1设计模式及其作用 17
2.2多线程设计模式简介 20
2.3设计模式的描述 21
第3章Immutable Object(不可变对象)模式 23
3.1Immutable Object模式简介 23
3.2Immutable Object模式的架构 25
3.3Immutable Object模式实战案例 27
3.4Immutable Object模式的评价与实现考量 31
3.5Immutable Object模式的可复用实现代码 32
3.6Java标准库实例 32
3.7相关模式 34
3.7.1Thread Specific Storage模式(第10章) 34
3.7.2Serial Thread Confinement模式(第11章) 34
3.8参考资源 34
第4章Guarded Suspension(保护性暂挂)模式 35
4.1Guarded Suspension模式简介 35
4.2Guarded Suspension模式的架构 35
4.3Guarded Suspension模式实战案例解析 39
4.4Guarded Suspension模式的评价与实现考量 45
4.4.1内存可见性和锁泄漏(Lock Leak) 46
4.4.2线程过早被唤醒 46
4.4.3嵌套监视器锁死 47
4.5Guarded Suspension模式的可复用实现代码 50
4.6Java标准库实例 50
4.7相关模式 51
4.7.1Promise模式(第6章) 51
4.7.2Producer-Consumer模式(第7章) 51
4.8参考资源 51
第5章Two-phase Termination(两阶段终止)模式 52
5.1Two-phase Termination模式简介 52
5.2Two-phase Termination模式的架构 53
5.3Two-phase Termination模式实战案例 56
5.4Two-phase Termination模式的评价与实现考量 63
5.4.1线程停止标志 63
5.4.2生产者-消费者问题中的线程停止 64
5.4.3隐藏而非暴露可停止的线程 65
5.5Two-phase Termination模式的可复用实现代码 65
5.6Java标准库实例 66
5.7相关模式 66
5.7.1Producer-Consumer模式(第7章) 66
5.7.2Master-Slave模式(第12章) 66
5.8参考资源 66
第6章Promise(承诺)模式 67
6.1Promise模式简介 67
6.2Promise模式的架构 68
6.3Promise模式实战案例解析 70
6.4Promise模式的评价与实现考量 74
6.4.1异步方法的异常处理 75
6.4.2轮询(Polling) 75
6.4.3异步任务的执行 75
6.5Promise模式的可复用实现代码 77
6.6Java标准库实例 77
6.7相关模式 78
6.7.1Guarded Suspension模式(第4章) 78
6.7.2Active Object模式(第8章) 78
6.7.3Master-Slave模式(第12章) 78
6.7.4Factory Method模式 78
6.8参考资源 79
第7章Producer-Consumer(生产者/消费者)模式 80
7.1Producer-Consumer模式简介 80
7.2Producer-Consumer模式的架构 80
7.3Producer-Consumer模式实战案例解析 83
7.4Producer-Consumer模式的评价与实现考量 87
7.4.1通道积压 87
7.4.2工作窃取算法 88
7.4.3线程的停止 92
7.4.4高性能高可靠性的Producer-Consumer模式实现 92
7.5Producer-Consumer模式的可复用实现代码 92
7.6Java标准库实例 93
7.7相关模式 93
7.7.1Guarded Suspension模式(第4章) 93
7.7.2Thread Pool模式(第9章) 93
7.8参考资源 93
第8章Active Object(主动对象)模式 94
8.1Active Object模式简介 94
8.2Active Object模式的架构 95
8.3Active Object模式实战案例解析 98
8.4Active Object模式的评价与实现考量 105
8.4.1错误隔离 107
8.4.2缓冲区监控 108
8.4.3缓冲区饱和处理策略 108
8.4.4Scheduler空闲工作者线程清理 109
8.5Active Object模式的可复用实现代码 109
8.6Java标准库实例 111
8.7相关模式 112
8.7.1Promise模式(第6章) 112
8.7.2Producer-Consumer模式(第7章) 112
8.8参考资源 112
第9章Thread Pool(线程池)模式 113
9.1Thread Pool模式简介 113
9.2Thread Pool模式的架构 114
9.3Thread Pool模式实战案例解析 116
9.4Thread Pool模式的评价与实现考量 117
9.4.1工作队列的选择 118
9.4.2线程池大小调校 119
9.4.3线程池监控 121
9.4.4线程泄漏 122
9.4.5可靠性与线程池饱和处理策略 122
9.4.6死锁 125
9.4.7线程池空闲线程清理 126
9.5Thread Pool模式的可复用实现代码 127
9.6Java标准库实例 127
9.7相关模式 127
9.7.1Two-phase Termination模式(第5章) 127
9.7.2Promise模式(第6章) 127
9.7.3Producer-Consumer模式(第7章) 127
9.8参考资源 128
第10章Thread Specific Storage(线程特有存储)模式 129
10.1Thread Specific Storage模式简介 129
10.2Thread Specific Storage模式的架构 131
10.3Thread Specific Storage模式实战案例解析 133
10.4Thread Specific Storage模式的评价与实现考量 135
10.4.1线程池环境下使用Thread Specific Storage模式 138
10.4.2内存泄漏与伪内存泄漏 139
10.5Thread Specific Storage模式的可复用实现代码 145
10.6Java标准库实例 146
10.7相关模式 146
10.7.1Immutable Object模式(第3章) 146
10.7.2Proxy(代理)模式 146
10.7.3Singleton(单例)模式 146
10.8参考资源 147
第11章Serial Thread Confinement(串行线程封闭)模式 148
11.1Serial Thread Confinement模式简介 148
11.2Serial Thread Confinement模式的架构 148
11.3Serial Thread Confinement模式实战案例解析 151
11.4Serial Thread Confinement模式的评价与实现考量 155
11.4.1任务的处理结果 155
11.5Serial Thread Confinement模式的可复用实现代码 156
11.6Java标准库实例 160
11.7相关模式 160
11.7.1Immutable Object模式(第3章) 160
11.7.2Promise模式(第6章) 160
11.7.3Producer-Consumer模式(第7章) 160
11.7.4Thread Specific Storage(线程特有存储)模式 (第10章) 161
11.8参考资源 161
第12章Master-Slave(主仆)模式 162
12.1Master-Slave模式简介 162
12.2Master-Slave模式的架构 162
12.3Master-Slave模式实战案例解析 164
12.4Master-Slave模式的评价与实现考量 171
12.4.1子任务的处理结果的收集 172
12.4.2Slave参与者实例的负载均衡与工作窃取 173
12.4.3可靠性与异常处理 173
12.4.4Slave线程的停止 174
12.5Master-Slave模式的可复用实现代码 174
12.6Java标准库实例 186
12.7相关模式 186
12.7.1Two-phase Termination模式(第5章) 186
12.7.2Promise模式(第6章) 186
12.7.3Strategy(策略)模式 186
12.7.4Template(模板)模式 186
12.7.5Factory Method(工厂方法)模式 186
12.8参考资源 187
第13章Pipeline(流水线)模式 188
13.1Pipeline模式简介 188
13.2Pipeline模式的架构 189
13.3Pipeline模式实战案例解析 194
13.4Pipeline模式的评价与实现考量 208
13.4.1Pipeline的深度 209
13.4.2基于线程池的Pipe 209
13.4.3错误处理 212
13.4.4可配置的Pipeline 212
13.5Pipeline模式的可复用实现代码 212
13.6Java标准库实例 222
13.7相关模式 222
13.7.1Serial Thread Confinement模式(第11章) 222
13.7.2Master-Slave模式(第12章) 222
13.7.3Composite模式 223
13.8参考资源 223
第14章Half-sync/Half-async(半同步/半异步)模式 224
14.1Half-sync/Half-async模式简介 224
14.2Half-sync/Half-async模式的架构 224
14.3Half-sync/Half-async模式实战案例解析 226
14.4Half-sync/Half-async模式的评价与实现考量 234
14.4.1队列积压 235
14.4.2避免同步层处理过慢 235
14.5Half-sync/Half-async模式的可复用实现代码 236
14.6Java标准库实例 240
14.7相关模式 240
14.7.1Two-phase Termination模式(第5章) 240
14.7.2Producer-Consumer模式(第7章) 241
14.7.3Active Object模式(第8章) 241
14.7.4Thread Pool模式(第9章) 241
14.8参考资源 241
第15章模式语言 242
15.1模式与模式间的联系 242
15.2mmutable Object(不可变对象)模式 244
15.3Guarded Suspension(保护性暂挂)模式 244
15.4Two-phase Termination(两阶段终止)模式 245
15.5Promise(承诺)模式 246
15.6Producer-Consumer(生产者/消费者)模式 247
15.7Active Object(主动对象)模式 248
15.8Thread Pool(线程池)模式 249
15.9Thread Specific Storage(线程特有存储)模式 250
15.10Serial Thread Confinement(串行线程封闭)模式 251
15.11Master-Slave(主仆)模式 252
15.12Pipeline(流水线)模式 253
15.13Half-sync/Half-async(半同步/半异步)模式 254
附录本书常用UML图指南 255
A.1UML简介 255
A.2类图(Class Diagram) 256
A.1.1类的属性、方法和立体型(Stereotype) 256
A.1.2类与类之间的关系 258
A.3序列图(Sequence Diagram) 261
【Java多线程编程|国内首部Java多线程设计模式原创作品《Java多线程编程实战指南(设计模式篇)》已出版...】参考文献 263
推荐阅读
- 面试|我经历的IT公司面试及离职感受(转)
- java|设计模式——创建型——工厂方法(Factory Method)
- 设计模式|设计模式_创建型模式——工厂方法
- 设计模式|设计模式——创建型软件设计模式——工厂方法模式
- 设计模式之装饰器模式
- 设计模式之设计原则
- 设计模式六大原则(5)(迪米特法则 最少知道)
- 观察者模式实现之EventBus(Google)
- Java高级面试|常见设计模式——装饰模式
- java设计模式——单例模式