Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
在并发编程中,有两个基本执行单元:processes (进程) 和 threads (线程)。在 Java 编程语言中,并发编程主要涉及线程。但是,进程也很重要。
计算机系统通常具有许多活动进程和线程。即使在只有一个执行核心的系统中也是如此,虽然在任何给定时刻只有一个线程实际执行。通过称为时间切片的 OS 功能,单个核的处理时间在进程和线程之间共享。
对于具有多个处理器或具有多个执行核心的处理器的计算机系统来说,它变得越来越普遍。这大大增强了系统并发执行进程和线程的能力 但即使在没有多个处理器或执行核心的简单系统上,并发也是可能的。
进程具有自包含的执行环境。进程通常具有完整的私有基本运行时资源集;特别是,每个进程都有自己的内存空间。
进程通常被视为程序或应用程序的同义词。但是,用户看到的单个应用程序实际上可能是一组协作进程。为了促进进程之间的通信,大多数操作系统都支持 Inter Process Communication(进程间通信) (IPC) 资源,例如管道和套接字。IPC 不仅用于同一系统上的进程之间的通信,而且还用于不同系统上的进程。
Java 虚拟机的大多数实现都作为单个进程运行。Java 应用程序可以使用 ProcessBuilder
对象创建其他进程。多进程应用程序超出了本课程的范围。
线程有时被称为 lightweight processes (轻量级进程)。进程和线程都提供执行环境,但创建新线程所需的资源比创建新进程要少。
线程存在于进程中 每个进程至少有一个线程。线程共享进程的资源,包括内存和打开的文件。这使得工作变得高效,但也存在了一个潜在的问题——通信。
多线程执行是 Java 平台的基本特性。每个应用程序至少有一个线程 或几个,如果你算上“system”线程,其负责内存管理和信号处理等事情。但是从应用程序员的角度来看,你只是从一个线程开始,称为 main thread (主线程)。该线程具有创建其他线程的能力,我们将在下一节中进行演示。