在使用线程和为多线程环境编程时,了解Java和线程状态中的线程生命周期非常重要。
可以通过实现Runnable
接口或扩展Thread
类来创建java线程类,但是为了启动java线程,首先要创建Thread
对象并调用start()
方法来执行run()
方法作为一个线程运行。
Java线程生命周期
下图显示了java中线程生命周期的不同状态。可以在java中创建一个线程并启动它。但是线程状态如何从可运行更改为阻塞取决于线程调度程序的OS实现,而java没有完全控制。
1. 新线程(New)
当使用new运算符创建一个新的Thread
对象时,线程状态是New Thread。此时,线程不活动,它是Java编程内部的状态。
2. 可运行(Runnable)
当在Thread
对象上调用start()
函数时,它的状态变为Runnable
。该控件被赋予Thread
调度程序以完成它的执行。是否立即运行此线程或在运行之前将其保留在可运行的线程池中,取决于线程调度程序的OS实现。
3. 运行(Running)
当线程正在执行时,它的状态将更改为Running。线程调度程序从可运行的线程池中选择一个线程,并将其状态更改为Running。然后CPU开始执行该线程。一个线程可以将状态更改为Runnable,Dead或Blocked从运行状态取决于时间切片,线程完成run()
方法或等待某些资源。
4. 阻塞/等待(Blocked/Waiting)
一个线程可以等待其他线程使用线程连接完成,或者它可以等待一些资源可用。例如,生产者消费者问题或服务员通知程序实现或IO资源,然后它的状态更改为等待。一旦线程等待状态结束,它的状态就会变为Runnable,并且它会被移回可运行的线程池。
死亡(Dead)
一旦线程完成执行,它的状态就会变为Dead,并且它被认为不存在。
以上是线程的不同状态。知道它们以及线程如何改变它的状态。这就是java中的线程生命周期。