线程的状态
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
}