JAVA线程池线程复用机制核心摘要

1、线程创建时机

1.1、submitTask

executor.submit(task);

java 复制代码
ExecutorService executor = Executors.newFixedThreadPool(3);

// 创建一个 Callable 任务
 Callable<Integer> task = new Callable<Integer>() {
    @Override
    public Integer call() throws Exception {
       System.out.println("Task is being processed by " + Thread.currentThread().getName());
       Thread.sleep(1000); // 模拟一些工作
       return 42; // 返回结果
            }
};

Future<Integer> future = executor.submit(task);

1.2、addWorker

java 复制代码
        int c = ctl.get();
        if (workerCountOf(c) < corePoolSize) {
            if (addWorker(command, true))
                return;
            c = ctl.get();
        }

1.3、创建线程&跟worker绑定

java 复制代码
        Worker(Runnable firstTask) {
            setState(-1); // inhibit interrupts until runWorker
            this.firstTask = firstTask;
            this.thread = getThreadFactory().newThread(this);
        }

this.thread = getThreadFactory().newThread(this);

这里是worker跟线程关联的核心,new Thread 的时候把woker作为runable传进去了,后面thread.start()的时候,会回调worker的run()方法,这样线程就跟worker绑定了。

java 复制代码
 if (workerAdded) {
                    t.start();
                    workerStarted = true;
                }

启动线程,回调worker 的 runWorker方法

1.4、线程复用核心

java 复制代码
final void runWorker(Worker w) {
        Thread wt = Thread.currentThread();
        Runnable task = w.firstTask;
        w.firstTask = null;
        w.unlock(); // allow interrupts
        boolean completedAbruptly = true;
        try {
            while (task != null || (task = getTask()) != null) {
                w.lock();

while循环,有任务执行,无任务则block,等待任务,这样线程就能做复用了。

相关推荐
云烟成雨TD1 分钟前
Spring AI Alibaba 1.x 系列【36】FlowAgent 和 BaseAgent 抽象类
java·人工智能·spring
qq_283720052 分钟前
Python 模块精讲:collections —— 高级数据结构深度解析(defaultdict、Counter、deque)
java·开发语言
一颗青果4 分钟前
Cookie 与 Session 超详细讲解
服务器·前端·github
2401_8371638910 分钟前
CSS如何实现网页打印样式优化_利用@media print重写布局
jvm·数据库·python
Irene199111 分钟前
Oracle 21c XE 安装后默认不包含HR等示例表,CO 模式、SCOTT 模式安装过程记录
数据库·oracle
zs宝来了12 分钟前
React 18 并发模式:Fiber 架构与时间切片
前端·javascript·框架
万物得其道者成21 分钟前
Vue3 使用 Notification 浏览器通知,解决页面关闭后旧通知点击无法跳转问题
前端·vue.js·edge浏览器
乐嘉明24 分钟前
在线堆文件分析功能
java·ai
ShineWinsu24 分钟前
CSS 技术文章
前端·css
青槿吖25 分钟前
第二篇:从复制粘贴到自定义规则!Spring Cloud Gateway 断言 + 过滤全玩法,拿捏微服务流量管控
java·spring boot·后端·spring cloud·微服务·云原生·架构