Java中线程的生命周期如图所示

Java中多线程的生命周期

它包含如下5个阶段。

  • 新建
  • 就绪
  • 运行
  • 阻塞
  • 结束

其中阻塞阶段不一定会出现,它可能直接调用完成进入到结束状态,下面说下这5种状态的解释和状态转换。

5种状态

新建状态

程序调用new关键字创建一个线程的时候便是新建状态,关于Java中线程创建的几种方式请参考这里

就绪状态

当程序调用start()方法便由新建状态转为就绪状态。这里不是run()方法,run()方法还是在主线程中执行,可以参考Java中多线程start()和run()方法的区别

运行状态

由就绪状态到运行状态是获取到了cpu的执行权限,调用线程的run()方法。

阻塞状态

阻塞状态是由运行状态执行sleep()、wait()或者join()方法。

结束状态

结束状态是执行完成或者异常等结束。

状态转换

新建->就绪

调用线程的start()方法

就绪->运行

获取到了cpu的执行权限

运行->阻塞

调用sleep()、wait()、join()方法。

阻塞->就绪

sleep()时间片到,调用notify/notifyAll方法

运行->结束

执行完成、调用结束方法或者异常退出。

总结

关于线程的生命周期可以记住文章开头出的那个转换图即可。