一 . 概述
线程的整个生命周期是在不断切换其状态的.
在jdk中的Thread类之中有一个枚举类,在这个枚举类之中定义了线程的所有状态.
二 .线程的状态
public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; }
上面的所有状态里面在加上一running状态总共有7个状态.
[1]new状态: 当一个线程创建之后就处于new状态.
[2]runnable状态: 就绪状态,该线程是可以在抢占了时间片之后就能运行.
[3]Terminated状态 : 线程终结之后就处于死亡状态.
[4]block状态: 线程因没有获得锁而被迫进入了锁池之中的状态,或者IO资源没有获取到,都是被迫进入的.
[5]waiting状态 : 线程主动进入等待池中,等待其他线程唤醒自己.
[6]time_waiting(sleep)状态: 线程主动进入睡眠状态.
[7]running(运行)状态:获取时间片的线程的状态,处于正在运行的状态中.
三 .线程状态转换
在上面线程的状态的描述其实无法很详细的,因为线程可能由于各种原因进行了状态的转换.
我们现在了解线程的状态:
这里需要各种的API,但是现在仅仅只是作为一个了解.
例子:
@Test public void test() { //创建了一个线程,此时线程处于new状态 Thread thread = new Thread(new Runnable() { @Override public void run() { try { //此时线程处于运行状态 Thread.sleep(300); //此时线程处于睡眠状态 } catch (InterruptedException e) { e.printStackTrace(); } // for(int i = 0 ; i <5 ;i++) System.out.println("running ..."); try { //陷入到了常量的一个等待池, //没有其他线程的唤醒,则该线程有缘都会等待该线程. "1".wait(); } catch (InterruptedException e) { e.printStackTrace(); } } }); thread.start(); //开启线程,线程就处于了runnable--就绪状态. }
在上面的例子中,我们展现了多个线程的状态.
但是现在还无法展现更多的状态的状态,当对线程的理解更深的情况下,我们就对这一部分的理解更好.
原文:https://www.cnblogs.com/trekxu/p/8974975.html