Java | 线程的状态和生命周期

86 阅读2分钟

大家好,我是程序员影子

一名致力于帮助更多朋友快速入门编程的程序猿

今天来聊一聊关于Java 中的线程的状态和生命周期。

线程是程序执行流的最小单元,它是进程的一个执行路径。在Java中,线程有几种不同的状态,这些状态反映了线程从创建到终止的整个生命周期。

一、线程状态

  1. 新建(New) :当使用new关键字创建一个线程对象后,该线程处于新建状态。
  2. 就绪(Runnable) :线程对象被创建后,其他线程调用了该对象的start()方法,此时线程进入就绪状态。处于就绪状态的线程已经做好了准备,随时等待CPU调度执行。
  3. 运行(Running) :就绪状态的线程获得CPU时间片后就进入运行状态。处于运行状态的线程在JVM中执行。
  4. 阻塞(Blocked) :运行的线程由于某种原因放弃了CPU时间片,让出了CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会再次获得CPU时间片转到运行状态。阻塞的情况分三种:等待阻塞,同步阻塞和其他阻塞。
  5. 等待(Waiting) :线程执行wait()方法,JVM会把该线程放入等待队列,让线程等待直到另一个线程调用notify()或者notifyAll()方法。
  6. 计时等待(Timed Waiting) :线程执行sleep()方法或者wait()方法加上超时参数后,线程会进入计时等待状态。当超时时间到了之后,线程会从等待状态恢复到就绪状态。
  7. 终止(Terminated) :线程的run()方法执行完成后,线程终止。终止的线程不可再次复生。

二、线程生命周期图

三、线程生命周期的转换

  • 新建 -> 就绪:调用start()方法。
  • 就绪 -> 运行:获得CPU时间片。
  • 运行 -> 阻塞:遇到I/O操作或其他阻塞操作。
  • 阻塞 -> 就绪:阻塞操作完成。
  • 就绪 -> 等待:调用wait()方法。
  • 等待 -> 就绪:其他线程调用notify()notifyAll()方法。
  • 就绪 -> 计时等待:调用sleep()方法或wait()方法带超时。
  • 计时等待 -> 就绪:超时时间到。
  • 运行 -> 终止:run()方法执行完成。

以上就是本次分享的所有内容,感兴趣的朋友点个关注呀,感谢大家啦~

更多Java | AI+编程玩法 的相关资料和源码请移步至公众号:程序员影子