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,等待任务,这样线程就能做复用了。

相关推荐
数据要素X几秒前
【数据架构08】数字化转型架构篇
大数据·数据库·数据仓库·架构·数据库架构
找不到、了1 分钟前
关于MyBatis 的懒加载(Lazy Loading)机制
java·mybatis
ygming5 分钟前
Q51- code295- 数据流的中位数 + Q52- code767- 重构字符串
前端
袋鱼不重8 分钟前
手把手搭建Vue轮子从0到1:4. Reactivity 模块的实现
前端·vue.js·源码
!win !8 分钟前
免费的个人网站托管-GitHub Pages篇
前端·开发工具
xw510 分钟前
免费的个人网站托管-GitHub Pages篇
前端·github
阿星AI工作室11 分钟前
扣子可以发布到小米搞钱了!手把手教程来了丨coze开发者瓜分亿级流量池指南
前端·人工智能·后端
小华同学ai11 分钟前
GitHub 开源爆款工具|MediaCrawler:程序员零门槛采集抖音/小红书/B站等社交评论,30K star 背后的场景实战揭秘!
前端·后端·github
盏灯11 分钟前
🔥🔥🔥websocket 前后端通信,接受命令,并执行
前端·后端·websocket
闲坐含香咀翠14 分钟前
B端项目版本同步方案:基于Vite插件的自动化实践
前端·vite·rollup.js