前言
在并发编程中,有两个基本的处理单元:进程和线程。在Java 编程语言当中,并发编程主要与线程相关。可是进程也很重要。
一个计算机系统通常有很多活跃的进程和线程。即使在只有单个执行核心的系统也是如此,因此在任何给定时刻只有一个线程实际执行。单个内核的处理时间通过称为时间切片的操作系统功能在进程和线程之间共享。
对于计算机系统来说,拥有多个处理器或具有多个执行核心的处理器变得越来越普遍。这大大增强了系统的进程和线程的并发执行能力,但是,即使在没有多个处理器或执行核心的简单系统上,并发也是可能的。
进程
每一个线程都有一个自包含的执行环境,每一个线程通常都有一个完整的、私有的基础运行环境资源;尤其是每一个进程有自己的内存空间。
进程通常被看作是程序或者应用的同义词。然而,用户看到的单一的程序可能事实上是一组协作的进程。为了促进进程之间的交流,大多数的操作系统都支持进程间通信(IPC)资源,例如pipes 和sockets。IPC不仅用于同一系统的进程间通信,还可以在不同的系统之间使用。
Java虚拟机的很多实现都是作为单个进程运行。Java应用程序可以使用ProcessBuilder对象创建其他进程。
线程
线程通常被称为轻量级进程,进程和线程都提供一个执行环境,但是创建一个新的线程需要的资源比创建一个进程所需要的资源少。
线程存在于进程当中,每一个进程至少有一个线程,线程共享进程的资源,包括内存和打开的文件,这有助于实现高效但可能存在问题的沟通。
多线程执行是Java平台的一个非常重要的特性。每一个程序至少有一个线程,如果您将执行内存管理和信号处理等操作的“系统”线程计算在内的话,那就是多个。但是从程序的开发者的角度看,从一个叫做主线程的线程开始。这个线程有能力创建额外的线程。