Thread的6种状态

1、NEW:新建状态

Thread 对象被创建后,就进入了 NEW 状态。

2、RUNNABLE:运行状态

  • 调用了 start 方法,正在虚拟机中执行或者等待 CPU
  • WAITTING 状态,当其他线程执行完毕
  • TIMED_WAITTING 状态,当 sleep 结束
  • BLOCKED 状态,当获取到对象锁
  • 当一个线程调用 suspend()
  • 当线程遇到 IO

3、BLOCKED:锁池状态

  • 等待监视器锁的状态
  • 调用wait()方法并且超时之后。其实就相当于未定时的 wait(),然后调用 notify
  • 调用 notify() 方法之后,但是还没获取到锁时

4、WAITTING:等待状态

  • 处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒,否则会处于无限期等待的状态
  • 调用了wait(),等待 notify 的时候
  • 调用了join(),等待那个线程结束的时候

5、TIMED_WAITTING:定时等待状态

  • 处于这种状态的线程不会被分配CPU执行时间,不过无须无限期等待被其他线程显示地唤醒,在达到一定时间后它们会自动唤醒。

6、TERMINATED:终止状态

  • 当线程的 run() 方法完成时,或者主线程的main()方法完成时,我们就认为它终止了。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦终止了,就不能复生。
  • 在一个终止的线程上调用 start() 方法,会抛出 java.lang.IllegalThreadStateException 异常。

看下Thread 源码中是如何定义的