内容介绍
随着CPU 多核时代的到来,多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。而解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案。然而,多线程编程相关的设计模式书籍多采用C++作为描述语言,且书中所举的例子多与应用开发人员的实际工作相去甚远。本书采用Java(JDK1.6)语言和UML 为描述语言,并结合作者多年工作经历的相关实战案例,介绍了多线程环境下常用设计模式的来龙去脉:各个设计模式是什么样的及其典型的实际应用场景、实际应用时需要注意的事项以及各个模式的可复用代码实现。
目录
第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.1 Immutable Object模式简介 23 3.2 Immutable Object模式的架构 25 3.3 Immutable Object模式实战案例 27 3.4 Immutable Object模式的评价与实现考量 31 3.5 Immutable Object模式的可复用实现代码 32 3.6 Java标准库实例 32 3.7 相关模式 34 3.7.1 Thread Specific Storage模式(第10章) 34 3.7.2 Serial Thread Confinement模式(第11章) 34 3.8 参考资源 34 第4章 Guarded Suspension(保护性暂挂)模式 35 4.1 Guarded Suspension模式简介 35 4.2 Guarded Suspension模式的架构 35 4.3 Guarded Suspension模式实战案例解析 39 4.4 Guarded Suspension模式的评价与实现考量 45 4.4.1 内存可见性和锁泄漏(Lock Leak) 46 4.4.2 线程过早被唤醒 46 4.4.3 嵌套监视器锁死 47 4.5 Guarded Suspension模式的可复用实现代码 50 4.6 Java标准库实例 50 4.7 相关模式 51 4.7.1 Promise模式(第6章) 51 4.7.2 Producer-Consumer模式(第7章) 51 4.8 参考资源 51 第5章 Two-phase Termination(两阶段终止)模式 52 5.1 Two-phase Termination模式简介 52 5.2 Two-phase Termination模式的架构 53 5.3 Two-phase Termination模式实战案例 56 5.4 Two-phase Termination模式的评价与实现考量 63 5.4.1 线程停止标志 63 5.4.2 生产者-消费者问题中的线程停止 64 5.4.3 隐藏而非暴露可停止的线程 65 5.5 Two-phase Termination模式的可复用实现代码 65 5.6 Java标准库实例 66 5.7 相关模式 66 5.7.1 Producer-Consumer模式(第7章) 66 5.7.2 Master-Slave模式(第12章) 66 5.8 参考资源 66 第6章 Promise(承诺)模式 67 6.1 Promise模式简介 67 6.2 Promise模式的架构 68 6.3 Promise模式实战案例解析 70 6.4 Promise模式的评价与实现考量 74 6.4.1 异步方法的异常处理 75 6.4.2 轮询(Polling) 75 6.4.3 异步任务的执行 75 6.5 Promise模式的可复用实现代码 77 6.6 Java标准库实例 77 6.7 相关模式 78 6.7.1 Guarded Suspension模式(第4章) 78 6.7.2 Active Object模式(第8章) 78 6.7.3 Master-Slave模式(第12章) 78 6.7.4 Factory Method模式 78 6.8 参考资源 79 第7章 Producer-Consumer(生产者/消费者)模式 80 7.1 Producer-Consumer模式简介 80 7.2 Producer-Consumer模式的架构 80 7.3 Producer-Consumer模式实战案例解析 83 7.4 Producer-Consumer模式的评价与实现考量 87 7.4.1 通道积压 87 7.4.2 工作窃取算法 88 7.4.3 线程的停止 92 7.4.4 高性能高可靠性的Producer-Consumer模式实现 92 7.5 Producer-Consumer模式的可复用实现代码 92 7.6 Java标准库实例 93 7.7 相关模式 93 7.7.1 Guarded Suspension模式(第4章) 93 7.7.2 Thread Pool模式(第9章) 93 7.8 参考资源 93 第8章 Active Object(主动对象)模式 94 8.1 Active Object模式简介 94 8.2 Active Object模式的架构 95 8.3 Active Object模式实战案例解析 98 8.4 Active Object模式的评价与实现考量 105 8.4.1 隔离 107 8.4.2 缓冲区监控 108 8.4.3 缓冲区饱和处理策略 108 8.4.4 Scheduler空闲工作者线程清理 109 8.5 Active Object模式的可复用实现代码 109 8.6 Java标准库实例 111 8.7 相关模式 112 8.7.1 Promise模式(第6章) 112 8.7.2 Producer-Consumer模式(第7章) 112 8.8 参考资源 112 第9章 Thread Pool(线程池)模式 113 9.1 Thread Pool模式简介 113 9.2 Thread Pool模式的架构 114 9.3 Thread Pool模式实战案例解析 116 9.4 Thread 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.5 Thread Pool模式的可复用实现代码 127 9.6 Java标准库实例 127 9.7 相关模式 127 9.7.1 Two-phase Termination模式(第5章) 127 9.7.2 Promise模式(第6章) 127 9.7.3 Producer-Consumer模式(第7章) 127 9.8 参考资源 128 第10章 Thread Specific Storage(线程特有存储)模式 129 10.1 Thread Specific Storage模式简介 129 10.2 Thread Specific Storage模式的架构 131 10.3 Thread Specific Storage模式实战案例解析 133 10.4 Thread Specific Storage模式的评价与实现考量 135 10.4.1 线程池环境下使用Thread Specific Storage模式 138 10.4.2 内存泄漏与伪内存泄漏 139 10.5 Thread Specific Storage模式的可复用实现代码 145 10.6 Java标准库实例 146 10.7 相关模式 146 10.7.1 Immutable Object模式(第3章) 146 10.7.2 Proxy(代理)模式 146 10.7.3 Singleton(单例)模式 146 10.8 参考资源 147 第11章 Serial Thread Confinement(串行线程封闭)模式 148 11.1 Serial Thread Confinement模式简介 148 11.2 Serial Thread Confinement模式的架构 148 11.3 Serial Thread Confinement模式实战案例解析 151 11.4 Serial Thread Confinement模式的评价与实现考量 155 11.4.1 任务的处理结果 155 11.5 Serial Thread Confinement模式的可复用实现代码 156 11.6 Java标准库实例 160 11.7 相关模式 160 11.7.1 Immutable Object模式(第3章) 160 11.7.2 Promise模式(第6章) 160 11.7.3 Producer-Consumer模式(第7章) 160 11.7.4 Thread Specific Storage(线程特有存储)模式 (第10章) 161 11.8 参考资源 161 第12章 Master-Slave(主仆)模式 162 12.1 Master-Slave模式简介 162 12.2 Master-Slave模式的架构 162 12.3 Master-Slave模式实战案例解析 164 12.4 Master-Slave模式的评价与实现考量 171 12.4.1 子任务的处理结果的收集 172 12.4.2 Slave参与者实例的负载均衡与工作窃取 173 12.4.3 可靠性与异常处理 173 12.4.4 Slave线程的停止 174 12.5 Master-Slave模式的可复用实现代码 174 12.6 Java标准库实例 186 12.7 相关模式 186 12.7.1 Two-phase Termination模式(第5章) 186 12.7.2 Promise模式(第6章) 186 12.7.3 Strategy(策略)模式 186 12.7.4 Template(模板)模式 186 12.7.5 Factory Method(工厂方法)模式 186 12.8 参考资源 187 第13章 Pipeline(流水线)模式 188 13.1 Pipeline模式简介 188 13.2 Pipeline模式的架构 189 13.3 Pipeline模式实战案例解析 194 13.4 Pipeline模式的评价与实现考量 208 13.4.1 Pipeline的深度 209 13.4.2 基于线程池的Pipe 209 13.4.3 处理 212 13.4.4 可配置的Pipeline 212 13.5 Pipeline模式的可复用实现代码 212 13.6 Java标准库实例 222 13.7 相关模式 222 13.7.1 Serial Thread Confinement模式(第11章) 222 13.7.2 Master-Slave模式(第12章) 222 13.7.3 Composite模式 223 13.8 参考资源 223 第14章 Half-sync/Half-async(半同步/半异步)模式 224 14.1 Half-sync/Half-async模式简介 224 14.2 Half-sync/Half-async模式的架构 224 14.3 Half-sync/Half-async模式实战案例解析 226 14.4 Half-sync/Half-async模式的评价与实现考量 234 14.4.1 队列积压 235 14.4.2 避免同步层处理过慢 235 14.5 Half-sync/Half-async模式的可复用实现代码 236 14.6 Java标准库实例 240 14.7 相关模式 240 14.7.1 Two-phase Termination模式(第5章) 240 14.7.2 Producer-Consumer模式(第7章) 241 14.7.3 Active Object模式(第8章) 241 14.7.4 Thread Pool模式(第9章) 241 14.8 参考资源 241 第15章 模式语言 242 15.1 模式与模式间的联系 242 15.2 mmutable Object(不可变对象)模式 244 15.3 Guarded Suspension(保护性暂挂)模式 244 15.4 Two-phase Termination(两阶段终止)模式 245 15.5 Promise(承诺)模式 246 15.6 Producer-Consumer(生产者/消费者)模式 247 15.7 Active Object(主动对象)模式 248 15.8 Thread Pool(线程池)模式 249 15.9 Thread Specific Storage(线程特有存储)模式 250 15.10 Serial Thread Confinement(串行线程封闭)模式 251 15.11 Master-Slave(主仆)模式 252 15.12 Pipeline(流水线)模式 253 15.13 Half-sync/Half-async(半同步/半异步)模式 254 附录 本书常用UML图指南 255 A.1 UML简介 255 A.2 类图(Class Diagram) 256 A.1.1 类的属性、方法和立体型(Stereotype) 256 A.1.2 类与类之间的关系 258 A.3 序列图(Sequence Diagram) 261 参考文献 263 |
作者介绍
黄文海,2004年开始从事软件开发工作,近几年从事软件项目管理工作。在其工作过程中积累了丰富的技术指导经验和企业内部培训经验。曾在InfoQ中文站和IBM developerWorks上发表过十几篇技术、项目管理文章。
^_^:dfe3b3b381f1eb10ccd9b0f22a8c0955
^_^:f655dd7b615e1e66904cc136f05cfc0b