线程的起源
线程的起源
线程在其生命周期中的六种状态
线程在其生命周期中的六种状态
NEW 新建
当系统或软件运行时,会发出start指令创建线程,但是线程创建后,不一定会马上进入到运行状态,这种情况即为NEW 新建状态,一般出现在系统或者程序处于待机状态时。
Runnable 可运行
线程创建完毕,处于随时可在电脑系统或者 java 虚拟机中运行的状态,java 虚拟机是软件运行时产生的“工作间”。此时的线程可能正在运行代码,也可能仍处于待机状态,这取决于操作系统处理器此时的工作状态。
Blocked 锁阻塞
线程需要获取软件中的对象锁才能运行。当一个线程试图获取某一个对象锁,而该对象锁正在被另外的线程占用时,该线程将进入到 Blocked 锁阻塞的状态。当另外的线程占用完毕,对象锁被释放出来时,锁阻塞的线程会变为 Runnalbe 可运行的状态。
Waiting 无限等待
Waiting 无限等待即一个线程进入 Waiting 状态,需要等待另一个线程执行唤醒指令将其唤醒。进入这个状态后的线程是无法自动唤醒的,必须等待另一个线程调用 notify 指令或者 notifyAll 方法才能够被唤醒。Waiting 无限等待状态一般发生在主线程异常,子线程没有按既定程序关闭的情况下。
Timed Waiting 计时等待
Timed Waiting 计时等待出现在多线程同时运行的情况中。当多个线程运行时,对象锁的数量无法满足所有线程同时运行,因此会有一些线程进入到 Timed Waiting 计时等待的状态,并按顺序依次获取对象锁执行运行指令。
Teminated 被终止
当系统关闭或者程序结束工作时,运行过程中产生的各种线程也会随之停止工作和运行,进入到 Teminated 被终止的状态。这种状态下的线程并不是休眠或待机,而是已经不存在于任何的系统或程序中。
NEW 新建
当系统或软件运行时,会发出start指令创建线程,但是线程创建后,不一定会马上进入到运行状态,这种情况即为NEW 新建状态,一般出现在系统或者程序处于待机状态时。
Runnable 可运行
线程创建完毕,处于随时可在电脑系统或者 java 虚拟机中运行的状态,java 虚拟机是软件运行时产生的“工作间”。此时的线程可能正在运行代码,也可能仍处于待机状态,这取决于操作系统处理器此时的工作状态。
Blocked 锁阻塞
线程需要获取软件中的对象锁才能运行。当一个线程试图获取某一个对象锁,而该对象锁正在被另外的线程占用时,该线程将进入到 Blocked 锁阻塞的状态。当另外的线程占用完毕,对象锁被释放出来时,锁阻塞的线程会变为 Runnalbe 可运行的状态。
Waiting 无限等待
Waiting 无限等待即一个线程进入 Waiting 状态,需要等待另一个线程执行唤醒指令将其唤醒。进入这个状态后的线程是无法自动唤醒的,必须等待另一个线程调用 notify 指令或者 notifyAll 方法才能够被唤醒。Waiting 无限等待状态一般发生在主线程异常,子线程没有按既定程序关闭的情况下。
Timed Waiting 计时等待
Timed Waiting 计时等待出现在多线程同时运行的情况中。当多个线程运行时,对象锁的数量无法满足所有线程同时运行,因此会有一些线程进入到 Timed Waiting 计时等待的状态,并按顺序依次获取对象锁执行运行指令。
Teminated 被终止
当系统关闭或者程序结束工作时,运行过程中产生的各种线程也会随之停止工作和运行,进入到 Teminated 被终止的状态。这种状态下的线程并不是休眠或待机,而是已经不存在于任何的系统或程序中。
线程的应用场景
线程的应用场景
单独的一个线程并无实际应用场景,而多个线程的应用场景广泛。多线程使用最多的场景是各类服务器,如 web 服务器或者游戏服务器之类的专用服务器。服务器的后台任务处理、异步处理和分布式计算等操作均通过多线程来实现。同样的,向多个用户批量发送电子邮件、发微博、记录日志等用户对软件的具体操作,也都是通过多线程来实现的。简而言之,所有的软件操作、系统运行都得依靠多线程才能正常使用。多线程的出现大大提升了计算机的操作效率,目前主流的软件开发都是基于多线程。