线程就像一个小人物,从出生到死亡要经历几个状态:新建、就绪、运行、阻塞和终止。了解线程的生命周期就像了解它的“旅程”,帮助我们更好地控制线程!
1. 新建(New)
当我们用new创建一个线程对象后,线程就进入了新建状态。它已经有了“身份”,但还没有开始“工作”。
Thread thread = new Thread();
此时,线程还只是“站在门口”,等待被启动。
2. 就绪(Runnable)
一旦调用start()方法,线程进入就绪状态。它已经准备好要被CPU调用了,但可能需要等一会儿,因为CPU要安排时间片给它。
thread.start();
这时线程就像“在跑道上准备起跑”的运动员,等待着“枪响”。
3. 运行(Running)
当CPU选择了线程并给它分配了时间片,线程进入运行状态。它开始在run()方法里执行代码,真正开始工作!
线程在运行状态下,会完成自己的任务,除非被迫停止(比如突然遇到异常),否则它会把该干的事情干完。
4. 阻塞(Blocked)
线程在运行中,有时会碰到“红灯”,暂时停下来。这就是阻塞状态。线程可能因为以下原因进入阻塞状态:
- 等待IO:比如读取文件时,可能需要等待硬盘响应;
- 等待资源:比如锁没释放,要等前一个线程释放资源;
- Sleep或Wait:线程主动“休息”一会儿。
try {
Thread.sleep(1000); // 线程休息1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
一旦条件满足,线程可以重新“回到赛道”,进入就绪状态。
5. 终止(Terminated)
当线程的run()方法执行完,或因异常退出,线程就进入了终止状态。它完成了任务,不再参与CPU调度,生命周期也随之结束。
终止后的线程就像完成任务的工人,安静地退场了。
总结:线程的五段旅程一目了然!
- 新建:创建对象,准备上场;
- 就绪:等待CPU调度,“蹲跑”状态;
- 运行:CPU分配时间片,开始执行;
- 阻塞:临时遇阻,等条件满足再继续;
- 终止:任务完成,生命周期结束。
理解这些状态,有助于我们更好地管理和优化多线程程序,掌控每个线程的生命周期!
1318

被折叠的 条评论
为什么被折叠?



