总结 Java 线程的几种状态
1. 线程状态一共有几种
Java 线程的状态可以分为以下 6 种
2. 每种状态表示的含义
新建状态(New):
线程对象被创建,但还未调用 start() 方法启动线程。
运行状态(Runnable):
线程正在 JVM 中运行,但可能正在等待 CPU 时间片或者等待 I/O 操作完成。
阻塞状态(Blocked):
线程正在等待锁或者其他阻塞条件,例如调用了 Thread.sleep() 方法或者等待输入输出完成。
等待状态(Waiting):
线程正在等待其他线程的通知,例如调用了 Object.wait() 方法或者 LockSupport.park() 方法。
计时等待状态(Timed Waiting):
线程正在等待指定时间之后的通知,例如调用了 Thread.sleep() 方法或者带有超时参数的 Object.wait() 方法或者 LockSupport.parkNanos() 方法等。
终止状态(Terminated):
线程已经执行完毕或者出现异常,不再运行。
3. 状态之间的切换条件
线程状态之间的切换条件如下:
新建状态(New):
当线程对象被创建时,自动进入新建状态。
运行状态(Runnable):
当调用了 start() 方法之后,线程进入就绪状态,等待 CPU 调度执行。
阻塞状态(Blocked):
当线程等待锁或者其他阻塞条件时,进入阻塞状态,等待条件满足后继续执行。
等待状态(Waiting):
当线程调用了 Object.wait() 方法或者 LockSupport.park() 方法等等待其他线程通知时,进入等待状态,等待其他线程通知后继续执行。
计时等待状态(Timed Waiting):
当线程调用了带有超时参数的 Object.wait() 方法或者 Thread.sleep() 方法等计时等待方法时,进入计时等待状态,等待超时或者其他条件满足后继续执行。
终止状态(Terminated):
当线程执行完毕或者出现异常时,进入终止状态,不再运行。
总结
线程的状态转换取决于线程本身的动作和外部条件的影响,理解线程状态转换和状态切换条件对于编写高效、稳定的多线程程序是非常重要的。