1.新建(New): 线程对象已创建,但还没有调用 start() 方法。
2.可运行(Runnable): 线程已启动,处于就绪状态,等待 JVM 的线程调度器分配CPU时间。
3.阻塞(Blocked): 线程正在等待监视器锁定以进入同步块或方法。
4.等待(Waiting): 线程在无限期等待另一个线程执行特定操作,例如调用 wait() 方法。
5.终止(Terminated): 线程已完成执行。
可以通过 Thread 类的 getState() 方法获取线程的状态,该方法返回一个 Thread.State 枚举类型的值,代表线程的当前状态。下面是如何使用 getState() 方法的例子:
import java.lang.Thread.State;
import java.lang.management.ManagementFactory;
public class ThreadStatusExample extends Thread {
public void run() {
// 线程执行的代码
}
public static void main(String[] args) {
ThreadStatusExample t = new ThreadStatusExample();
System.out.println(t.getState()); // 新建
t.start();
while (!t.getState().equals(State.RUNNABLE)) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(t.getState()); // 可运行或阻塞
}
}
在这个例子中,我们创建了一个 ThreadStatusExample 对象 t 并打印了它的状态。在没有调用 start() 方法前,其状态是 NEW。然后我们启动线程 t,并在循环中检查它的状态,直到它变为 RUNNABLE 或者 BLOCKED。
需要注意的是,由于JVM和操作系统调度的原因,线程的实际状态可能会有所变化,而且 getState() 方法只能给出一个快照,它并不能保证在任意时刻都是绝对准确的。此外,线程状态的检查应该小心进行,以避免因状态转换而导致的竞态条件。