java多线程状态及各个状态间转换

567 阅读1分钟


一、多线程状态

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状态