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 源码中是如何定义的