【并发编程篇05】Java线程状态及状态变化

29 阅读1分钟

JDK中 Thread类中有个枚举State

image.png

image.png

Java线程状态

  • 新建(NEW)
  • 可运行(RUNNABLE)
  • 阻塞(BLOCKED)
  • 等待(WAITING)
  • 时间等待(TIMED_WAITING)
  • 终止(TERMINATED)

Java线程状态变化

  • 创建线程对象是新建状态
  • 调用start方法转变为可执行状态
  • 线程获取到CPU执行权,执行结束是终止状态
  • 在可执行状态中,如果没有获取CPU的执行权,可能切换到其他状态
    • 如果没有获取到锁(synchronized或lock)进入阻塞状态。获取到锁再切换为可执行状态
    • 如果线程调用了wait方法进入等待状态,其他线程调用notify方法唤醒后可切换为可执行状态
    • 如果线程调用sleep(10)方法,进入计时等待状态,到时间后可切换为可执行状态