一.概述
线程的生命周期之中,会由不同的状态进行转换,理解这些状态的概念可以帮助理解线程的运行过程.
二 .线程状态
在Thread类之中,存在一个内部类Status(实际是一个枚举类),这个类描述了线程的状态.
public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }
在这个类之中定义线程的六个状态.其中,runnable状态包括我们的说的运行状态和就绪状态,因为这两个状态的切换是由JVM决定的,我们可以理解为一个状态.
[1]NEW: 线程对象创建之后的状态,此时线程没有调用start()方法.
[2]Runnable:线程对象处于可运行状态,是否正在运行取决于时间片是否已经分配.
[3]Block:阻塞状态.一般情况下是由于线程抢夺锁资源不成功,进入了阻塞队列之中.
[4]wating : 等待状态,一般是线程自己放弃时间片进入等待状态,在没有其他线程的唤醒时,此线程一直处于等待队列之中.
[5]time-wait: 休眠状态,一般是线程自己主动休眠进入的状态,当时间过去之后,线程自动进入可运行状态.诸如sleep,wait这样的方法都可能进入到该状态之中.
[6]terminated: 终结状态,一般是由线程出现异常或者完全运行完成进入到的状态之中.