目录

前言
线程状态及其状态转换是线程生命周期中的关键部分,下面我们就来讲解六种线程状态以及其如何转换。
一.线程状态图

线程状态其实是一种枚举类型Thread.State
class T_state{
public static void main(String[] args) {
for(Thread.State state:Thread.State.values()){
System.out.println(state);
}
}
}

- NEW(初始):创建了一个线程,但还没有通过start方法调用。可以理解为安排了工作,但还没有开始工作。
- RUNNABLE(运行):又分为Ready(就绪状态)和Running(运行中状态)。
当线程对象被创建之后,若有线程(比如main线程)调用了该线程对象的start,那么该线程就会进入可运行线程池进行等待线程调用,获取CPU的使用权,此时就处于Ready(就绪状态),当获取到cpu使用权之后,就转变为Running(运行中状态)。
Ready可以理解为即将开始工作,而Running即正在工作中。
- BLOCKED(阻塞):线程试图获取一个锁对象,但此时锁对象被其他线程所占有,那么线程就进入阻塞等待,当获取到锁,则进入Running状态。
- WAITING(等待):线程处于等待状态,等待其他线程唤醒,可以通过notify或者notifyAll方法来唤醒。
- TIMED_WAITING(超时等待):可以在指定的时间内返回。可以使用带参数的sleep或者wait。
- TERMINATED(终止):线程执行结束。主线程和子线程互不影响,子线程并不会因为主线程结束就结束。
二.线程状态
1.初始状态(NEW)
用new关键字新建一个线程对象,这个线程就处于new状态。
public static void main(String[] args) {
// 创建一个线程,该线程在执行时会暂停1000毫秒
Thread t=new Thread(()->{
try {
Thread.sleep(1000); // 模拟线程执行的延迟
} catch (InterruptedException e) {
e.printStackTrace(); // 处理线程被中断的异常
}
});
System.out.println("t的线程状态:"+t.getState()); // 输出线程的当前状态
}
t的线程状态:NEW
2.运行状态(RUNNING)
分为RUNNING(运行状态)和Ready(就绪状态).
public static void main(String[] args) {
Thread t=new Thread(()->{
try {
Thread.sleep(1000);
}catch (InterruptedExcep

最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



