面试常问题之一,还不赶快拿下~
线程的生命周期
-
NEW尚未启动的线程处于此状态。RUNNABLE可运行 在Java虚拟机中执行的线程处于此状态。BLOCKED封堵 被阻塞等待监视器锁定的线程处于此状态。WAITING正在等待另一个线程执行特定动作的线程处于此状态。TIMED_WAITING正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。TERMINATED已退出的线程处于此状态。
运行图
注意:
有的资料上会把线程的生命周期说成七个
其实就是把 Runnable(上图最大蓝框)分成了两部分 ready(),running()
本质上都是这6种
可以利用下面的代码来具体测试
package com.event.method_;
/**
* written by 刘瑞臻
* time:2022/11/27 11:39
*/
public class Thread_state {
public static void main(String[] args) {
T t = new T();
//初始状态
System.out.println(t.getName() +" 状态"+t.getState());
t.start();
//运行中的状态
while (Thread.State.TERMINATED!=t.getState())
{
System.out.println(t.getName() + "状态"+t.getState());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//结束的状态
System.out.println(t.getName() + "状态"+t.getState());
}
}
class T extends Thread{
@Override
public void run() {
for (int i = 0; i <10; i++) {
System.out.println("子线程执行");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
运行结果如下: