# 进程和线程

> 原文： [https://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html](https://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html)

在并发编程中，有两个基本执行单元：_ 处理 _ 和 _ 线程 _。在 Java 编程语言中，并发编程主要涉及线程。但是，流程也很重要。

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

对于具有多个处理器或具有多个执行核心的处理器的计算机系统来说，它变得越来越普遍。这极大地增强了系统并发执行进程和线程的能力 - 但即使在没有多个处理器或执行核心的简单系统上也可以实现并发。

## 流程

进程具有自包含的执行环境。进程通常具有完整的私有基本运行时资源集;特别是，每个进程都有自己的内存空间。

流程通常被视为程序或应用程序的同义词。但是，用户看到的单个应用程序实际上可能是一组协作进程。为了促进进程之间的通信，大多数操作系统都支持 _ 进程间通信 _（IPC）资源，例如管道和套接字。 IPC 不仅用于同一系统上的进程之间的通信，而且还用于不同系统上的进程。

Java 虚拟机的大多数实现都作为单个进程运行。 Java 应用程序可以使用 [`ProcessBuilder`](https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html) 对象创建其他进程。多进程应用程序超出了本课程的范围。

## 主题

线程有时被称为 _ 轻量级进程 _。进程和线程都提供执行环境，但创建新线程所需的资源比创建新进程要少。

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

多线程执行是 Java 平台的基本特性。每个应用程序至少有一个线程 - 或几个，如果你计算“系统”线程，它们执行内存管理和信号处理等操作。但是从应用程序员的角度来看，你只需要一个线程，称为 _ 主线程 _。该线程具有创建其他线程的能力，我们将在下一节中进行演示。