[译]线程生命周期-理解Java中的线程状态

线程生命周期-理解Java中的线程状态

在多线程编程环境下,理解线程生命周期和线程状态很是重要。java

在上一篇教程中,咱们已经学习了如何建立java线程:实现Runnable接口或者成为Thread的子类,但启动一个java线程,则须要先建立一个Thread实例,而后调用此实例上的start(),这个线程就被启动了并会调用run()方法执行任务。编程

线程状态

下图展现了java线程中的几种不一样状态,咱们建立一个线程并启动它,但该线程什么时候从状态Runnable变为Running以及Blocked则取决于操做系统的线程调度实现,因此Java对状态变动是无能为力的。多线程

线程状态

New

当使用new操做建立一个新Thread实例时,咱们说建立了一个New线程,此时线程并未激活,它只是Java编程时的一个内部状态。学习

Runnable

当在Thread实例上调用start()方法后,线程的状态变为了Runnable,并交由操做系统的线程调度器来调度线程执行。具体是当即运行该线程或是先把线程放入线程池中彻底取决于OS线程调度器的实现。操作系统

Running

线程执行时,其状态变动为Running。线程调度器从Runnable线程池中取出一个线程,并把状态设置为Running,而后CPU就开始执行此线程。Running中的线程会因为时间片分配、线程执行完成或者等待获取资源等缘由而变动为:Runnable、Dead或者Blocked状态。线程

Blocked/Waiting

线程能够经过thread join操做等待其余线程结束而把本身变为waiting状态,也可能由于一些资源不可用(例如IO资源不可用)而变成waiting状态,在生产者/消费者模式或等待者/通知者模式中就有因等待而变成waitting状态。当线程结束了等待,它就又变成Runnable并被从新放回Runnable线程池中。教程

Dead

当线程执行完成后,其状态就变为Dead了,也就是说该线程已再也不存活。接口

上面就是几种线程状态,理解线程的状态及变动条件对于理解线程的工做将会有很大的帮助。  生命周期

 

源文连接:http://www.journaldev.com/1044/life-cycle-of-thread-understanding-thread-states-in-java资源

相关文章
相关标签/搜索