线程状态和状态之间的变化

72 阅读1分钟

1、线程包括哪些状态

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

2、线程状态之间是如何变化的?

创建线程对象是新建状态

调用了start()方法转变为可执行状态

线程获取到了CPU的执行权,执行结束是终止状态

在可执行状态的过程中,如果没有获取CPU的执行权,可能会切换其他状态:

  • 如果没有获取锁(synchronized或lock)进入阻塞状态,获取锁再切换为可执行状态
  • 如果线程调用了wait()方法进入等待状态,其他线程调用notify()唤醒后可切换为执行状态
  • 如果线程调用了sleep(50)方法,进入即时等待状态,到时间后可切换为可执行状态