线程生命周期是指线程从创建到终止所经历的一系列状态,Java 中的线程生命周期分为六个状态@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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》