Java线程状态

在 Java 中,线程有多种状态,并且 Java 提供了 Thread.State 枚举类来表示这些状态。下面为你详细介绍线程的状态以及这个枚举类。

线程的状态

Java 中线程的状态由 Thread.State 枚举类定义,总共有 6 种状态:

  1. NEW(新建):线程对象已经创建,但还没有调用 start() 方法。
  2. RUNNABLE(可运行):线程已经调用了 start() 方法,正在 Java 虚拟机中执行,但可能正在等待操作系统的其他资源(如 CPU)。此状态包含了传统意义上的“就绪”和“运行”两种状态。
  3. BLOCKED(阻塞):线程在等待获取一个排他锁,这个锁被其他线程持有,导致该线程暂时无法继续执行。
  4. WAITING(等待):线程正在等待另一个线程执行特定的操作。例如,调用了 Object.wait()Thread.join()LockSupport.park() 方法。处于这种状态的线程不会被分配 CPU 时间片,需要其他线程唤醒。
  5. TIMED_WAITING(计时等待):和 WAITING 状态类似,不过它有一个指定的等待时间。例如,调用了 Thread.sleep(long millis)Object.wait(long timeout)Thread.join(long millis)LockSupport.parkNanos()LockSupport.parkUntil() 方法。
  6. TERMINATED(终止):线程的执行已经结束,可能是正常结束,也可能是因为抛出了未捕获的异常而终止。

Thread.State 枚举类代码示例

下面是一个简单的 Java 代码示例,展示了如何使用 Thread.State 枚举类来获取线程的状态:

public class ThreadStateExample {
public static void main(String[] args) {
    // 创建一个新线程
    Thread thread = new Thread(() -> {
        try {
            // 线程休眠 2 秒
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    });
    // 获取线程初始状态(NEW)
    Thread.State state = thread.getState();
    System.out.println("线程初始状态: " + state);

    // 启动线程
    thread.start();

    // 获取线程启动后的状态(RUNNABLE 或 TIMED_WAITING)
    state = thread.getState();
    System.out.println("线程启动后的状态: " + state);

    try {
        // 等待线程执行完毕
        thread.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    // 获取线程终止后的状态(TERMINATED)
    state = thread.getState();
    System.out.println("线程终止后的状态: " + state);
}
}    

代码解释

  • 在代码中,首先创建了一个新线程 thread,此时线程处于 NEW 状态。
  • 调用 start() 方法启动线程后,线程进入 RUNNABLE 状态,由于线程中调用了 Thread.sleep(2000) 方法,所以它会进入 TIMED_WAITING 状态。
  • 最后,使用 join() 方法等待线程执行完毕,线程执行结束后进入 TERMINATED 状态。

通过这个示例,你可以清晰地看到线程在不同阶段的状态变化,以及如何使用 Thread.State 枚举类来获取线程的状态。

JUC编程 文章被收录于专栏

JUC 是 Java.util.concurrent 包的简称,它是 Java 5 引入的一个用于处理并发编程的工具包,为 Java 开发者提供了一系列用于高效处理并发任务的类和接口,极大地简化了多线程编程的复杂性。

全部评论
点赞 回复 分享
发布于 03-29 13:36 北京

相关推荐

04-24 10:14
已编辑
重庆邮电大学 Java
● 岗位描述:Bravo 102是由阿里国际技术全团队共同发起的技术人才孵化计划,打破传统人才选拔及培养框架,为有志于走向AI未来的技术新锐们,提供“你行你上+我要我来”的双向奔赴式的实习机会选择。 在这里,“我”将不被岗位定义,以能力选择业务战场,与全球顶尖团队并肩作战,沉浸式体验全球多元化业务战场与亿级流量高并发系统。 加入我们,成为AIDC首批102位Bravo Talent,一起掌舵AI,为我们的未来Bravo! 关于我们: 阿里国际技术专注于提供卓越的数字零售技术服务,致力于服务全球消费者,并触达全球中小企业买家。我们希望利用AI技术让每个人都能够轻松、便捷地享受全球优质的商品和服务,推动商业活动更加高效、可持续,为社会未来的发展带来更多可能性。 我们提供涵盖商品智能、商家服务、供应链优化、跨境物流、搜索推荐引擎、用户增长、金融服务、客户体验、AI 基础设施、企业数智化、全球云及高可用架构、研发效能等技术领域,实习生可跨多个技术域实践,深度参与多场景技术攻坚,探索你想选择的职业发展方向; 在这里,你将和我们一起,采用领先的数字化及人工智能等技术持续解决商业活动中的现实问题,创造技术价值,为消费者带来更加美好的体验!欢迎加入我们!● 工作职责: 1、参与基础软件的设计、开发和维护,如分布式文件系统、缓存系统、Key/Value 存储系统、数据库、Linux 操作系统等,探索 AI 在系统调优中的应用(如通过机器学习预测热点数据提升缓存命中率); 2、参与国际电商系统及基础设施的核心模块开发,集成 AI 模型服务,为公司产品提供强有力的后台支持,设计并实施最强大的解决方案; 3、参与产品的开发和维护,完成从需求到设计、开发和上线等整个项目周期内的工作,能够通过 AI 工具提升开发效率;4、参与海量数据处理和开发,使用Java/SQL/Python开发 ETL 流程,结合大模型实现数据清洗与特征工程自动化(如利用大模型生成 SQL 查询模板); 5、参与项目为用户提供丰富而有价值的桌面或无线软件产品,能够探索 AI 在业务场景的落地应用(如大模型在供应链定价、销量计划、库存、履约等复杂场景的智能洞察和协同,基于大模型的个性化推荐系统,交互式智能导购,需求预测模型部署,异常检测算法实现等)。● 岗位要求基础能力:学科成绩优异;代码能力出色:代码思路具备一定逻辑性,熟练使用常见的设计模式,输出高高质量代码(可读性、可理解性);专业成果:竞赛或论文产出:专业领域内知名会议或期刊发表过学术论文,担任一作/学生一作/共 —,或专利/软著;开源社区贡献:在GitHub等开源社区具备有较大影响力的技术项目 (star X),作为collaborate/committer/menber优先;实习经历:校内/校外项目深入了解并积极实践相关技术在实际场景的应用,能够独立应用技术解决问题#实习#有意向广州的欢迎私信勾搭,绝对核心组,也可做AI相关研发
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务