千家信息网

java线程池状态有哪些及状态转换实例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"java线程池状态有哪些及状态转换实例分析",在日常操作中,相信很多人在java线程池状态有哪些及状态转换实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2026年11月01日java线程池状态有哪些及状态转换实例分析

这篇文章主要介绍"java线程池状态有哪些及状态转换实例分析",在日常操作中,相信很多人在java线程池状态有哪些及状态转换实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"java线程池状态有哪些及状态转换实例分析"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前言:

在 Java 中,线程池的状态和线程的状态是完全不同的,

线程有 6 种状态:

  • NEW:初始化状态、

  • RUNNABLE:可运行/运行状态、

  • BLOCKED:阻塞状态、

  • WAITING:无时限等待状态

  • TIMED_WAITING:有时限等待状态和

  • TERMINATED:终止状态。

而线程池的状态有以下 5 种:

  • RUNNING:运行状态,线程池创建好之后就会进入此状态,如果不手动调用关闭方法,那么线程池在整个程序运行期间都是此状态。

  • SHUTDOWN:关闭状态,不再接受新任务提交,但是会将已保存在任务队列中的任务处理完。

  • STOP:停止状态,不再接受新任务提交,并且会中断当前正在执行的任务、放弃任务队列中已有的任务。

  • TIDYING:整理状态,所有的任务都执行完毕后(也包括任务队列中的任务执行完),当前线程池中的活动线程数降为 0 时的状态。到此状态之后,会调用线程池的 terminated() 方法。

  • TERMINATED:销毁状态,当执行完线程池的 terminated() 方法之后就会变为此状态。

这 5 种状态可以在 ThreadPoolExecutor 源码中找到,如下图所示:

线程池状态转移

线程池的状态转移有两条路径:

  • 当调用 shutdown() 方法时,线程池的状态会从 RUNNING 到 SHUTDOWN,再到 TIDYING,最后到 TERMENATED 销毁状态。

  • 当调用 shutdownNow() 方法时,线程池的状态会从 RUNNING 到 STOP,再到 TIDYING,最后到 TERMENATED 销毁状态。

线程状态转换的流程如下图所示:

terminated方法

线程池中的 terminated() 方法,也就是线程池从 TIDYING 转换到 TERMINATED 状态时调用的方法,默认是空的,

它的源码如下:

我们可以在创建线程池的时候重写 terminated() 方法,具体实现代码如下:

import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class ThreadPoolStateTransition {    public static void main(String[] args) throws InterruptedException {        // 创建线程池        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 10, 0L,                TimeUnit.SECONDS, new LinkedBlockingQueue<>(100)) {            @Override            protected void terminated() {                super.terminated();                System.out.println("执行 terminated() 方法");            }        };        // 关闭线程池        threadPool.shutdown();        // 等待线程池执行完再退出        while (!threadPool.awaitTermination(1, TimeUnit.SECONDS)) {            System.out.println("线程池正在运行中");        }    }}

到此,关于"java线程池状态有哪些及状态转换实例分析"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

状态 线程 方法 任务 运行 实例 实例分析 分析 学习 队列 更多 正在 源码 帮助 不同 实用 为此 接下来 也就是 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中国互联网科技股 互联网科技财经 互联网下的科技发展 互联网金融 科技 金融科技与互联网金融 互联网金融公司科技 紫鲸互联网科技 丰台科技园 互联网 上海电发互联网科技有限公司 农村开互联网科技讲堂 福州新华互联网科技学校 知乎 昊天互联网科技有限公司 晓花互联网科技有限公司网址 成都互联网科技公司工作好不好 滨湖区互联网智能科技产品有哪些 无锡工业互联网科技有限公司 山东有哪些互联网科技公司 全球科技与互联网公司市值变化 吉林省码上互联网科技电话 中国主要互联网科技公司 互联网佳科技有限公司 北京互联网科技公司 金融科技与互联网金融 互联网科技作文 上海万想互联网科技 互联网科技教育视频 佳云科技和互联网广告 全球顶尖互联网科技公司 世界互联网领先科技成果获奖 平安好医生打造互联网科技医疗
0