Java基础 线程的生命周期

发布时间 2023-10-27 18:53:55作者: 嘎嘎鸭2

 

 

1. 当创建线程对象的时候,是新建状态

2. 新建完之后 调用 start()方法 就变成了就绪状态(是在调用完了 start() 方法之后才变成了就绪状态)。在就绪状态下,线程开始抢夺 CPU 的执行权。注意是正在抢,还没有抢到,没抢到就无法执行代码。所以就绪状态 有执行资格,但没有执行权(有执行资格:有资格抢CPU的执行权;没有执行权:现在还没有抢到,不能执行代码)。说白了就是,在就绪状态,线程干的事情就是不停地在抢CPU

如果抢到了CPU的执行权,线程就会变成 运行状态

3. 运行状态下,线程就会运行代码。所以在运行状态下,线程有执行资格,也有执行权。在运行状态下,CPU的执行权是有可能会被其他的线程抢走的,一旦被抢走,就又回到了就绪状态。

如果在运行状态下,遇到了 sleep() 方法,线程就会 阻塞,说白了就是等着,什么也干不了,这个线程不能抢CPU的执行权,也不能执行代码,所以是没有执行资格,也没有执行权的。当睡眠的时间到了之后,就会变成就绪状态,重新开始抢夺CPU的执行权,抢到了才会继续执行代码

4.如果说当前的线程把 run() 方法里面所有的代码都运行完了,此时线程就会死亡,变成垃圾,此时就是死亡状态