线程状态
状态:
新生状态:new一个Thread
就绪状态:调用start()方法后立即进入,但不意味着立即调度执行
阻塞状态:调用sleep,wait,join或同步锁定时,线程进入阻塞状态,此时代码不会继续执行,等待阻塞解除之后重新进入就绪状态等待CPU调度执行
运行状态:进入运行状态线程才真正执行代码块
死亡状态:线程中断或结束,一旦死亡,不能再次启动
也可参照下图理解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndoNLERe-1626273037729)(H:\Soft\Typora\img\xc1.png)]
观察线程状态
主要代码:
Thread.State state = thread.getState();
System.out.println(state);
具体代码:
//观察测试线程的状态
public class TestState {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(()->{
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("/");
});
//观察状态
Thread.State state = thread.getState();
System.out.println(state);//NEW
//观察启动状态
thread.start();//启动线程
state = thread.getState();
System.out.println(state);//RUNNABLE
while (state!=Thread.State.TERMINATED){
Thread.sleep(100);
state = thread.getState();//更新线程状态
System.out.println(state);//输出状态;
}
thread.start();//报错,因为线程已经停止,即已经死亡,不可以再次启动
}
}
thread.start();//报错,因为线程已经停止,即已经死亡,不可以再次启动
}