在并发编程里,有两个基本的执行单元:进程和线程。在Java里,并发编程主要和线程相关。
一个计算机系统一般有多个进程和线程。即使对单核处理器也是如此,虽然实际上在执行的线程只有一个。处理器的运行时间被分为很多段(称为时间分割time slicing),由进程和线程分配使用。
现在多核多进行多线程的模式越来越普遍,这大大提高了系统进程和线程并发运行的能力。
进程(Process)
一个进程有自己的执行环境,有独有和完整的运行资源,特别的,每个进程都有自己的内存空间。
进程通常被认为是程序或应用的同义词。不过,一个应用往往包含多个进程。为促进进程间通信,大部分操作系统有进程间通信(Inter Process Communication IPC)资源,如管道流和套接字。IPC不仅可用于同一个系统的进程间通信,也可用于不同系统间通信。
大部分Java虚拟机以单进程运行。不过可以通过ProcessBuilder创建新的进程。
线程(Thread)
线程也称为轻量级进程(lightweight process)。进程和线程都用于提供执行环境,但是线程需要更少的资源。
线程存在于进程中——每个进程至少包含一个线程。多个线程共享一个进程的资源,包括内存和打开的文件等。这使得线程间通信更加容易,虽然可能带来一些问题。
多线程运行是Java平台一个很重要的特性。每个应用至少有一个线程,应用从main线程开始,在main线程又可以创建新的线程。在下一部分详细讲述如何创建新线程。