1.初始状态
new一个实例时,线程就进入了初始状态
2.就绪状态(可运行状态)
1)调用start()方法,就进入了可运行状态
2)sleep()方法结束
3)等待用户输入完毕
4)锁池里的线程拿到对象
5)线程时间片用完了
6)其他线程join()方法调用结束
3.运行状态
线程调度从运行池中选择一个线程。这是线程进入运行状态的唯一方式
只有就绪状态和运行状态可以互相转换
4.阻塞状态
失去处理器资源(除了失去CPU时间片)
1)线程调用sleep()方法
2)当前线程里的其他线程调用join()方法
3)等待用户输入时
5.死亡状态
1)线程的run()方法完成时
2)主线程的main()方法完成时
一个死去的线程不能复生,不能调用start()方法,会抛出异常