在计算机编程中有一个基本概念,就是在同一时刻处理多个任务的思想。
许多程序设计问题都要求,程序能够停下正在做的工作,转而处理某个其他问题,然后再返回主程序。有许多方法可以实现这个目的。最初,程序员们用所掌握的有关机器底层的知识来编写中继服务程序,主进程的挂起是通过硬件中继来触发的。尽管这么做可以解决问题,但是其难度太大,而且不能移植,所以使得将程序移植到新型号的机器上时,既费时又费力。
有时中继对于处理时间性强的任务是必需的,但是对于大量的其他问题,我们只是想把问题切分成多个可独立运行的部分(任务),从而提高程序的响应能力。在程序中,这些彼此独立运行的部分称之为线程,上述概念被称为“并发”。并发最常见的例子就是用户界面。通过使用任务,用户可以在按下按钮后快速得到一个响应,而不用被迫等待到程序完成当前任务为止。
通常,线程只是一种为单一处理器分配执行时间的手段。但是如果操作系统支持多处理器,那么每个任务都可以被指派给不同的处理器,并且他们是在真正地并行执行。在语言级别上,多线程所带来的便利之一便是程序员不用再操心机器上是有多个处理器还是只有一个处理器。由于程序在逻辑上被分为线程,所以如果机器拥有多个处理器,那么程序不需要特殊调整也能执行得很快。
所有这些都使得并发看起来相对简单,但是有一个隐患:共享资源。如果有多个并行任务都要访问同一项资源,那么就会出问题。例如,两个进场不能同时向一台打印机发送消息。为了解决这个问题,可以共享的资源,例如打印机,必须在试用期间被锁定。因此,整个过程是:某个任务锁定某项资源,完成其任务,然后释放资源锁,使其他任务可以使用这项资源。
Java的并发是内置于语言中的,Java SE5已经增添了大量额外的库支持。