一、多线程状态
1、初始化状态 start
2、就绪状态 ready-to-run
3、运行中状态 running
4、终止状态 dead
5、等待状态 waiting
6、超时等待状态 sleeping
7、阻塞状态 blocked
二、状态间转换
1、start -> ready-to-run
转换条件:Thread.start()
2、ready-to-run -> running
转换条件:cpu调度
3、running -> sleeping
转换条件:Threa.sleep()
4、running -> waiting
转换条件:Object.wait()
5、sleeping -> ready-to-run
转换条件:到达sleep指定时间
6、waiting -> ready-to-run
转换条件:Object.notify()or Object.notifyAll()
7、running -> ready-to-run
转换条件:Thread.yield()
8、running -> blocked
转换条件:IO or synchronized
9、blocked -> running
转换条件:io返回数据 or 释放锁
10、running -> dead
转换条件:代码执行完毕
11、blocked -> dead
转换条件:其它线程关闭io流
12、ready-to-run -> dead
转换条件:Thread.stop() or run() 退出
三、总结
sleeping、waiting、blocked只有blocked才能直接进入running状态