从刚问世起,Java 的部分魅力就来自其多线程。即便在多核和多 CPU 系统司空见惯之前,能够轻松编写多线程程序也是 Java 的一个标志性特征。
Java 性能方面的吸引力显而易见:如果有两个 CPU 可用,那么一个应用能够完成的工作量可能是原来的 2 倍,或者是以快 1 倍的时间完成相同的工作量。当然,这是在假设任务可以分解成离散的片段的前提之下的,因为 Java 不是能自动找出算法性部分并实现并行化的语言。幸运的是,今日所见之计算,往往是离散性的任务:服务器处理来自离散的客户端的同步请求,批处理作业在一系列数据上执行相同的操作,数学算法可以分节成多个组成部分,诸如此类。
本章探讨的主题是,如何挖掘出 Java 线程和同步设施的最大性能。