Java中线程的生命周期

本文详细探讨了Java中线程的生命周期,包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED六个状态,并通过实例展示了状态之间的流转。线程的生命周期对于理解和优化多线程程序至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中线程的生命周期

1 介绍

本篇文章我们讨论下Java中的一个非常核心的概念:线程的生命周期。在Java编程语言中,多线程编程非常重要。线程从创建到销毁是有生命周期的,在线程的生命周期中,线程会经历多种状态(state)。

2 线程状态说明以及状态流转图

java.lang.Thread类中有一个静态的枚举类:State,用来表示线程各种可能的状态:

public enum State {
        /**
         * NEW状态表示线程新创建,仍不能开始运行。
         */
        NEW,

        /**
         * RUNNABLE表示线程可运行(runnable or ready to run),有可能正在运行,或者正在资源ready,比如CPU调度。
         */
        RUNNABLE,

        /**
         * BLOCKED表示线程正在等待监视器锁(monitor lock),获取到监视器锁后可以进入同步代码块或者同步方法(synchronized block/method),当然可能是首次等待,也可能是调用Object.wait()等待之后再被唤醒(Object.notify()或者Object.notifyAll())后,因为唤醒后一般不能直接进入Runnable状态,需要重写争抢监视器锁,这时仍然是BLOCKED状态。
         */
        BLOCKED,

        /**
         * WAITING状态表示当前线程正在等待其他线程的一些动作(无超时时间的等待),包括如下三个场景:
         * Object.wait()调用之后等待其他线程调用Object.notify()或者Object.notifyAll()
         * Thread.join()调用之后等待指定的线程终止(进入TERMINATED状态)
         * LockSupport.park()调用之后等待等待其他线程调用LockSupport.unpark(thread)
         */
        WAITING,

        /**
         * TIMED_WAITING状态表示当前线程在限定时间内等待其他线程的一些动作,包括如下几个场景:
         * Thread.sleep
         * Object.wait指定等待时间
         * Thread.join指定等待时间
         * LockSupport.parkNanos
         * LockSupport.parkUntil
         */
        TIMED_WAITING,

        /**
         * TERMINATED表示终止状态,线程已经执行完成。
         */
        TERMINATED;
    }
复制代码

线程的可能状态流转图(状态机)如下所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值