【Java EE】多线程(三)线程状态

📚博客主页:爱敲代码的小杨.

✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》

❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️

🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • [1. 线程状态的分类](#1. 线程状态的分类)
  • [2. 线程状态代码演示](#2. 线程状态代码演示)
  • [3. 线程状态转化](#3. 线程状态转化)

1. 线程状态的分类

  1. NEW(新建): Thread对象有了, 但是还没有启动线程
  2. RUNNABLE(可运行): 线程在Java虚拟机中执行时处于此状态。这个线程可能正在CPU上执行, 这个线程可能没在CPU上执行, 随时可以调度到 CPU 上执行
  3. TERMINATED(终止): 线程已经终止了, 内核中的线程已经销毁了
  4. WAITING(等待):当线程在等待另一个线程执行特定动作(不带超时)时,线程处于此状态。
  5. TIMED_WAITING(计时等待):与WAITING状态类似,但是等待有一个超时时间。
  6. BLOCKED(阻塞):当线程试图进入synchronized锁定的代码块或方法时,而锁被其他线程持有时,线程将进入BLOCKED状态。

2. 线程状态代码演示

使用getState得到线程的状态

  1. NEW(新建):
java 复制代码
public class demo22 {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            System.out.println("hello t1");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        System.out.println("t1 线程的状态: " + t1.getState());
    }
}

运行结果:

  1. RUNNABLE(可运行):
java 复制代码
public class demo22 {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            System.out.println("hello t1");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        t1.start();
        System.out.println("t1 线程的状态: " + t1.getState());
    }
}
  1. TERMINATED(终止):
java 复制代码
public class demo22 {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            System.out.println("hello t1");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        });
        t1.start();
        // 等待t1线程执行结束
        t1.join();
        System.out.println("t1 线程的状态: " + t1.getState());
    }
}

运行结果:

  1. WAITING(等待):
java 复制代码
public class demo22 {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            while (true) {
                System.out.println("hello t1");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        t1.start();
        t1.join();
    }
}

由于 idea 中打印不好观察 WAITING, 我们使用jconsole工具来观察线程状态

jconsole:在 jdk 安装目录下的 bin 文件夹中

运行结果:

  1. TIMED_WAITING(计时等待)
java 复制代码
public class demo22 {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            while (true) {
                System.out.println("hello t1");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
        t1.start();
        t1.join(3600 * 100);
    }
}

3. 线程状态转化

举例:

小杨和小美要去买肯德基, 还没有去, 就是 NEW 状态

当小杨和小美开始去窗口排队,等待服务,就进入 RUNNABLE 状态 ;该状态并不表示已经被肯德稽开始接待,排在队伍中也是属于该状态,即可被服务的状态,是否开始服务,则看调度器的调度;

当小杨和小美因为一些事需要去忙, 例如:考虑吃什么?..这时候就进入了BLOCKED,WATING, TIMD_WATING状态

当小杨和小美都买完了肯德基为TREMINATED状态


相关推荐
虹科网络安全32 分钟前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje1 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv71 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫1 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287921 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本1 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
yaoxin5211232 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
极客先躯4 小时前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图
用户60648767188964 小时前
AI 抢不走的技能:用 Claude API 构建自动化工作流实战
java
我命由我123454 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime