线程的状态
约 392 字大约 1 分钟
2024-08-08
在Java程序中,一个线程对象只能调用一次 start() 方法启动新线程,并在新线程中执行 run() 方法。一旦 run() 方法执行完毕,线程就结束了。因此,Java 线程的状态有以下几种
New:新创建的线程,尚未执行Runnable:运行中的线程,正在执行run()方法的Java代码Blocked:运行中的线程,因为某些操作被阻塞而挂起Waiting:运行中的线程,因为某些操作在等待中Timed Waiting:运行中的线程,因为执行sleep()方法正在计时等待Terminated:线程已终止,因为run()方法执行完毕
用一个状态转移图表示如下

当线程启动后,它可以在 Runnable、Blocked、Waiting和Timed Waiting 这几个状态之间切换,直到最后变成 Terminated 状态,线程终止
线程终止的原因有
线程正常终止:
run()方法执行到return语句返回线程意外终止:
run()方法因为未捕获的异常导致线程终止对某个线程的
Thread实例调用stop()方法强制终止(强烈不推荐使用)
一个线程还可以等待另一个线程直到其运行结束。例如,main 线程在启动 t 线程后,可以通过 t.join() 等待 t 线程结束后再继续运行
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
System.out.println("hello");
});
System.out.println("start");
t.start();
t.join();
System.out.println("end");
// start
// hello
// end
}