JAVA线程状态

JAVA线程状态

新建(New)

创建后尚未启动的线程

运行(Runable)

包括了操作系统线程状态中的Running和Ready,

  • 正在执行

  • 正在等待CPU为它分配执行时间

无限期等待(Waiting)

处于这种状态线程不会被分配CPU执行时间,它们要等待被其他线程显式地唤醒,以下方法会让线程陷入无限期的等待状态

  • 没有设置Timeout参数的Object.wait()方法
  • 没有设置Timeout参数的Thread.join()方法
  • LockSupport.park()方法

期限等待(Timed Waiting)

处于这种状态的线程不会被分配CPU执行时间,不过无须等待被其他线程显示地唤醒,在一定时间滞后它们会由系统自动唤醒,例如以下方法

  • Thread.sleep()
  • 设置了Timeout参数的Object.wait()
  • 设置了Timeout参数的Thread.join()
  • LockSupport.parkNanos()
  • LockSupport.parkUntil()

阻塞(Block)

线程被阻塞了,阻塞与等待的区别是,阻塞在等待着获取到一个排它锁,这个事件将在另外一个线程放弃这个锁的时候发生

等待状态则是等待一段时间,或者唤醒动作发生,在程序等待进入同步区域的时候,线程将进入这种状态

结束(Terminated)

已终止线程的线程状态,线程已经结束执行

状态变换图