0

0

Java线程的五种状态详解及状态转换规则

王林

王林

发布时间:2024-02-19 17:03:06

|

975人浏览过

|

来源于php中文网

原创

深入了解java线程的五种状态及其转换规则

深入了解Java线程的五种状态及其转换规则

一、线程的五种状态介绍
在Java中,线程的生命周期可以分为五个不同的状态,包括新建状态(NEW)、就绪状态(RUNNABLE)、运行状态(RUNNING)、阻塞状态(BLOCKED)和终止状态(TERMINATED)。

  1. 新建状态(NEW):当线程对象创建后,它就处于新建状态。此时,线程对象已经分配了足够的资源来执行任务,但是还没有开始执行run()方法。
  2. 就绪状态(RUNNABLE):当线程调用了start()方法之后,线程会进入就绪状态。处于就绪状态的线程已经具备了运行的条件,等待CPU分配时间片段来执行代码。
  3. 运行状态(RUNNING):当就绪状态的线程获取到CPU时间片段后,进入运行状态,并开始执行run()方法中的代码。线程将一直保持运行状态,直到自行结束或被其他线程中断。
  4. 阻塞状态(BLOCKED):在以下情况下,线程会进入阻塞状态:

    • 调用了sleep()方法,主动让出了CPU资源。
    • 等待某个资源的释放,如锁资源。
    • 线程在join()方法中等待其他线程的结束。
  5. 终止状态(TERMINATED):线程结束后,就进入了终止状态。线程完成run()方法中的代码执行后,或者因为异常等原因导致线程中止,都会使线程进入终止状态。

二、状态之间的转换规则
线程的状态之间存在一定的转换规则,下面我们分别介绍每种状态之间的转换规则。

立即学习Java免费学习笔记(深入)”;

  1. 新建状态(NEW)转换为就绪状态(RUNNABLE):当线程对象创建后,调用了start()方法,线程就由新建状态转换为就绪状态。
  2. 就绪状态(RUNNABLE)转换为运行状态(RUNNING):当线程获取到CPU资源后,就从就绪状态转换为运行状态。
  3. 运行状态(RUNNING)转换为阻塞状态(BLOCKED):线程在执行过程中,可能会由于等待某个资源的释放或者主动释放CPU资源,而进入阻塞状态。
  4. 阻塞状态(BLOCKED)转换为就绪状态(RUNNABLE):当线程等待的资源被释放后,或者等待时间到达,就会从阻塞状态转换为就绪状态。
  5. 运行状态(RUNNING)转换为终止状态(TERMINATED):当线程的run()方法执行完成或者因为异常而导致线程中止时,线程会从运行状态转换为终止状态。

三、代码示例

码上飞
码上飞

码上飞(CodeFlying) 是一款AI自动化开发平台,通过自然语言描述即可自动生成完整应用程序。

下载

下面是一个简单的代码示例,展示了线程状态之间的转换规则:

class MyThread extends Thread {
    
    @Override
    public void run() {
        try {
            Thread.sleep(1000);
            System.out.println("线程执行完毕");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public class ThreadStateDemo {

    public static void main(String[] args) {
        MyThread thread = new MyThread();
        System.out.println("线程创建后状态:" + thread.getState());

        thread.start();
        System.out.println("调用start()方法后状态:" + thread.getState());

        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("等待500ms后状态:" + thread.getState());

        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("调用join()方法后状态:" + thread.getState());
    }
}

运行以上代码,可以看到输出结果如下:

线程创建后状态:NEW
调用start()方法后状态:RUNNABLE
等待500ms后状态:RUNNABLE
线程执行完毕
调用join()方法后状态:TERMINATED

以上代码创建了一个继承自Thread类的线程对象MyThread。在主线程中,我们可以观察到线程对象在不同阶段的状态变化。

通过深入了解Java线程的五种状态及其转换规则,我们能够更好地掌握多线程的原理,进一步提升并发编程的能力。同时,在实际开发过程中,对线程状态的判断和处理也是非常重要的。希望本文能对大家有所帮助。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

503

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

166

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

14

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

15

2026.01.21

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

166

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

14

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

15

2026.01.21

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

87

2025.12.01

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3万人学习

C# 教程
C# 教程

共94课时 | 7.8万人学习

Java 教程
Java 教程

共578课时 | 52.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号