通过源码我们可以看到Java中的线程存在6种状态,每种线程状态的含义如下
线程状态详细含义NEW一个尚未启动的线程的状态。也称之为初始状态、开始状态。线程刚被创建,但是并未启动。还没调用start方法。MyThread t = new MyThread()只有线程象,没有线程特征。RUNNABLE当我们调用线程对象的start方法,那么此时线程对象进入了RUNNABLE状态。那么此时才是真正的在JVM历程中创建了一个线程,线程一经启动并不是立即得到实行,线程的运行与否要听令与CPU的调度,那么我们把这个中央状态称之为可实行状态(RUNNABLE)也就是说它具备实行的资格,但是并没有真正的实行起来而是在等待CPU的度。BLOCKED当一个线程试图获取一个对象锁,而该对象锁被其他的线程持有,则该线程进入Blocked状态;当该线程持有锁时,该线程将变成Runnable状态。WAITING一个正在等待的线程的状态。也称之为等待状态。造成线程等待的原因有两种,分别是调用Object.wait()、join()方法。处于等待状态的线程,正在等待其他线程去实行一个特定的操作。例如:由于wait()而等待的线程正在等待另一个线程去调用notify()或notifyAll();一个由于join()而等待的线程正在等待另一个线程结束。TIMED_WAITING一个在限定时间内等待的线程的状态。也称之为限时等待状态。造成线程限时等待状态的原因有三种,分别是:Thread.sleep(long),Object.wait(long)、join(long)。TERMINATED一个完全运行完成的线程的状态。也称之为终止状态、结束状态各个状态的转换,如下图所示: