大家好,我是程序员影子
一名致力于帮助更多朋友快速入门编程的程序猿
今天来聊一聊关于Java 中的线程的状态和生命周期。
线程是程序执行流的最小单元,它是进程的一个执行路径。在Java中,线程有几种不同的状态,这些状态反映了线程从创建到终止的整个生命周期。
一、线程状态
- 新建(New) :当使用
new关键字创建一个线程对象后,该线程处于新建状态。 - 就绪(Runnable) :线程对象被创建后,其他线程调用了该对象的
start()方法,此时线程进入就绪状态。处于就绪状态的线程已经做好了准备,随时等待CPU调度执行。 - 运行(Running) :就绪状态的线程获得CPU时间片后就进入运行状态。处于运行状态的线程在JVM中执行。
- 阻塞(Blocked) :运行的线程由于某种原因放弃了CPU时间片,让出了CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会再次获得CPU时间片转到运行状态。阻塞的情况分三种:等待阻塞,同步阻塞和其他阻塞。
- 等待(Waiting) :线程执行
wait()方法,JVM会把该线程放入等待队列,让线程等待直到另一个线程调用notify()或者notifyAll()方法。 - 计时等待(Timed Waiting) :线程执行
sleep()方法或者wait()方法加上超时参数后,线程会进入计时等待状态。当超时时间到了之后,线程会从等待状态恢复到就绪状态。 - 终止(Terminated) :线程的
run()方法执行完成后,线程终止。终止的线程不可再次复生。
二、线程生命周期图
三、线程生命周期的转换
- 新建 -> 就绪:调用
start()方法。 - 就绪 -> 运行:获得CPU时间片。
- 运行 -> 阻塞:遇到I/O操作或其他阻塞操作。
- 阻塞 -> 就绪:阻塞操作完成。
- 就绪 -> 等待:调用
wait()方法。 - 等待 -> 就绪:其他线程调用
notify()或notifyAll()方法。 - 就绪 -> 计时等待:调用
sleep()方法或wait()方法带超时。 - 计时等待 -> 就绪:超时时间到。
- 运行 -> 终止:
run()方法执行完成。
以上就是本次分享的所有内容,感兴趣的朋友点个关注呀,感谢大家啦~
更多Java | AI+编程玩法 的相关资料和源码请移步至公众号:程序员影子