线程的生命周期详解(6大线程生命周期)

线程的生命周期详解(6大线程生命周期)-mikechen

线程生命周期是指线程从创建到终止所经历的一系列状态,Java 中的线程生命周期分为六个状态@mikechen

如下图所示:

线程的生命周期详解(6大线程生命周期)-mikechen

新建(New)、可运行(Runnable)、阻塞(Blocked)、等待(Waiting)、计时等待(Timed Waiting)、终止(Terminated),下面对每个状态进行详细解释:

1.新建状态(New)

线程对象被创建后,线程处于新建状态,但是还没有启动,此时线程并没有被系统分配资源,因此它并不能真正地去执行。

 

2.可运行状态(Runnable)

当调用 start() 方法后,线程就处于可运行状态,此时线程已经被系统分配了资源,并且可以真正地执行代码。

当线程获取到 CPU 时间片后,它就会进入运行状态,开始执行 run() 方法中的代码。

 

3.阻塞状态(Blocked)

线程在运行过程中,可能因为某些原因而暂时停止执行,此时线程进入阻塞状态。

常见的情况包括等待 I/O 操作的完成、等待获取 synchronized 同步锁、线程调用 Thread.sleep() 方法等,当这些情况结束后,线程就可以重新进入可运行状态。

 

4.等待状态(Waiting)

当线程调用了 Object.wait()、Thread.join() 或 LockSupport.park() 方法时,线程就会进入等待状态。

此时线程会释放掉它持有的锁,直到其他线程调用了相应的: notify()、notifyAll() 或者 interrupt() 方法后,线程才会重新进入可运行状态。

 

5.计时等待状态(Timed Waiting)

和等待状态类似,但是在等待的过程中可以指定等待的时间。

调用了 Thread.sleep()、Object.wait(long)、Thread.join(long)、LockSupport.parkNanos(long) 或 LockSupport.parkUntil(long) 方法时,线程就会进入计时等待状态。

等待指定时间后,线程会自动进入可运行状态。

 

6.终止状态(Terminated)

线程执行完了 run() 方法中的代码,或者发生了异常而导致线程提前终止,此时线程进入终止状态。

线程在终止状态下不能再次进入可运行状态,它已经彻底结束了自己的生命周期。

以上及时线程的生命周期的详解,更多Java多线程,请查看:Java多线程编程详解(看这篇就足够了)

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法