# 进程和线程

在并发编程中,有两个基本的执行单元:进程线程。在 Java 编程语言中,并发编程主要关心线程。但是,进程也很重要。

计算机系统通常具有许多活动进程和线程。即使在仅具有单个执行核心的系统中也是这样,因此在任何给定时刻只有一个线程实际执行。 单个核心的处理时间通过称为时间分片的 OS 功能在进程和线程之间共享。

计算机系统拥有多个具有多个执行核心的处理器或处理器变得越来越普遍。这大大增强了系统并行执行进程和线程的能力, 但是即使在简单的系统上也可以并行,没有多处理器或多核。

# 进程

进程具有独立的执行环境。一个进程通常有一套完整的,私有的基本运行时资源; 特别地,每个进程都有自己的内存空间。

进程通常被视为程序或应用程序的代名词。然而,用户将其视为单个应用程序可能实际上是一组协作过程。 为了促进进程之间的通信,大多数操作系统支持 Inter Process Communication(IPC) 资源, 例如管道和套接字。IPC 不仅用于同一系统上的进程之间的通信,而且用于不同系统上的进程。

Java 虚拟机的大多数实现作为一个进程运行。Java 应用程序可以使用 ProcessBuilder 对象创建其他进程 。多处理应用程序超出了本课的范围。

# 线程

线程有时被称为轻量级进程。进程和线程都提供一个执行环境,但创建一个新的线程比创建一个新的进程要少得多的资源。

线程存在于一个进程中 - 每个进程至少有一个进程。线程共享进程的资源,包括内存和打开的文件。这是有效但可能有问题的通信。

多线程执行是 Java 平台的一个基本特征。每个应用程序至少有一个线程,或者几个线程,如果算上计算“系统”线程, 执行内存管理和信号处理。但是从应用程序员的角度来看,你只需要一个线程,就是主线程。 这个线程有能力创建额外的线程,我们将在下一节演示。