Java多线程编程实战指南:设计模式篇(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 多线程设计模式简介

随着CPU的生产工艺从提高CPU主频频率转向多核化[3],以往那种靠提升CPU主频频率所带来的软件性能提升的“免费午餐”[4]已不复存在。这使得多线程编程在充分利用系统的CPU资源及提升软件性能方面起到了越来越重要的作用。然而,多线程编程本身又会引入开销及其他问题,如与单线程顺序编程相比更复杂、线程安全、死锁、活锁以及上下文切换开销等问题。多线程设计模式是多线程编程领域的设计模式,它可以帮助我们解决多线程编程中的许多问题。本书介绍的多线程设计模式在按其有助于解决的多线程编程相关的问题可粗略地进行如下分类。

• 在不使用锁的情况下保证线程安全:Immutable Object(不可变对象)模式(第3章)、Thread Specific Storage(线程特有存储)模式(第10章)、Serial Thread Confinement(串行线程封闭)模式(第11章)。

• 优雅地停止线程:Two-phase Termination(两阶段终止)模式(第5章)。

• 线程协作:Guarded Suspension(保护性暂挂)模式(第4章)、Producer-Consumer(生产者/消费者)模式(第7章)。

• 提高并发性(Concurrency)、缩短等待时间:Promise(承诺)模式(第6章)、Active Object(主动对象)模式(第8章)、Pipeline(流水线)模式(第13章)。

• 提高响应性(Responsiveness):Master-Slave(主仆)模式(第12章)、Half-sync/Half-async(半同步/半异步)模式(第14章)。

• 减少资源消耗:Thread Pool(线程池)模式(第9章)、Serial Thread Confinement(串行线程封闭)模式(第11章)。

读者现在不必急于理解上述分类的具体含义,可以在阅读完本书的相应章节后再回头来看这个分类。从上面的分类中我们可以看出,Serial Thread Confinement(串行线程封闭) 模式(第11章)被划分到了两个类别中,这是因为该模式既能在不使用锁的情况下保证线程安全,也有助于减少上下文切换所带来的资源消耗。