到现在为止,我们所书写的程序在任意时刻只能运行一件任务。编程问题中的大部分都可以通过这种顺序编程方式来解决。然而,在某些情况下,如果能够并行的运行程序中的多个部分,那么就可以使程序运行速度得到极大的提升。Java语言内置了多线程技术。在这我们将讨论如何使用Java中提供的多线程技术,实现在一个程序中并发运行多个任务的功能。
1. 多任务处理
现代计算机都是可以同时执行多项任务的。比如,我可以同时运行微信、QQ、钉钉等一系列软件。对我们来说,这些软件是同步在运行的,但真相并非如此。当我们在同时运行多个软件时,实际上,对一个CPU而言,它在某一时间点上只能运行一个任务,可以同时运行多个任务是CPU对多个任务同时交替执行而实现的。我们之所以感觉不到中断现象,是因为相对于人而言,CPU的速度实在是太快了。
2. 进程和线程
计算机中可以并发运行多个程序通常是由操作系统实现的。一个正在运行的程序通常称为一个进程(Process),每个进程都有自己独立运行的一块内存空间,每个进程的内部数据和状态都是完全独立的。
在进程内部有时会需要同时执行多个子任务。例如,我们在使用Word时,可以一边打字,一边拼写检查,同时还可以在后台进行打印,我们把子任务称为线程。
那进程和线程的关系是怎样的呢?
一个进程可以包含一个或多个线程,但至少会有一个线程。
线程存在于进程之中,二者之间主要区别在于,每个进程都需要操作系统为其分配独立的内存空间,而同一进程中的所有线程都在同一工作空间中工作,这些线程可以共享同一块内存和系统资源。
注意:操作系统调度的最小任务单位其实不是进程而是线程。
2.1 实现多任务的几种方式