Java 中线程的状态包括以下几种:
-
New(新建):当线程对象被创建但还没有调用
start()
方法时,线程处于新建状态。 -
Runnable(可运行):线程正在Java虚拟机中运行。在Runnable状态下,线程可能正在等待CPU时间片或者处于就绪状态等待获取CPU时间片。
-
Blocked(阻塞):线程被阻塞,通常是因为在等待某个监视器锁(synchronized同步块)或者在调用一个同步的方法。
-
Waiting(等待):线程处于等待状态,无限期等待另一个线程执行一个特定操作。这种状态通常是通过调用
Object.wait()
方法、Thread.join()
方法或者LockSupport.park()
方法来实现的。 -
Timed Waiting(计时等待):线程等待另一个线程执行一个操作,但是有超时时间,即等待一段时间后会自动恢复。这种状态通常是通过调用带有超时参数的
Object.wait()
方法、Thread.sleep()
方法、Thread.join(long millis)
方法或者LockSupport.parkNanos()
方法来实现的。 -
Terminated(终止):线程已经执行完毕或者因异常退出了
run()
方法,处于终止状态。
举例来说,假设有一个线程 myThread
,可以通过以下方式展示这些状态
Thread myThread = new Thread(() -> {
System.out.println("Thread is running.");
});
// 新建状态
// 当线程对象被创建但还没有调用 start() 方法时,线程处于新建状态
System.out.println("Thread state: " + myThread.getState());
// 启动线程
myThread.start();
// 可运行状态
// 线程正在Java虚拟机中运行
System.out.println("Thread state: " + myThread.getState());
// 让线程休眠一段时间
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 终止状态
// 线程执行完毕或者因异常退出了 run() 方法
System.out.println("Thread state: " + myThread.getState());
这样,你可以看到线程在不同阶段的状态变化。