第11章 多线程与并发编程实践
提到使用Java开发多线程程序,很多开发人员可能都认为是一个非常艰巨的任务。虽然有非常多的书籍或在线资料来介绍Java多线程开发相关的知识,但是开发出正确的多线程程序对开发人员来说仍然充满挑战。Java多线程开发中主要有三个困难。首先是编写正确的程序很难。不论是Java中的基本原语,还是java.util.concurrent包中的辅助工具类,要正确使用都不容易。其次是很难测试程序是否正确。在实际运行时,多个线程中的代码的执行顺序是无法确定的。程序在很多次运行时都不出现错误,并不表示该程序就是完全正确的。最后是在程序出现问题时很难调试。进行调试的一个先决条件是找到确定的重现错误的步骤。一个多线程程序可能在连续正常运行很长时间后突然出现与多线程相关的错误。在修改代码之后,即便程序运行了很长时间都没出现问题,也不能保证问题已经被修复。
对于Java多线程开发中的困难也并非“无计可施”。两个重要的武器是基础知识和实用工具。善用实用工具可以提高多线程程序的开发效率,避免常见的错误;而掌握基础知识是解决特定问题和正确使用工具的基础。本章围绕这两方面展开,大致上可以划分成三个部分:第一个部分是与多线程相关的基础知识,主要从Java虚拟机的层次进行介绍;第二个部分是基本的线程同步方式,主要介绍锁机制和Object类中的wait、notify和notifyAll等方法;第三个部分是java.util.concurrent包中提供的抽象层次更高的实用工具,以及Java SE 7中新增的内容。