沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • Spring

    • Spring基础小结
    • 聊聊Spring IoC 和 AOP
    • AOP实战
    • 元注解知识小结
    • SpringCache小记
    • 异步注解相关
    • ThreadPoolTaskExecutor与ThreadPoolExecutor的区别
      • 基本介绍
      • 创建示例
        • ThreadPoolExecutor
        • ThreadPoolTaskExecutor
      • 总结
      • 学习参考
    • 讲讲Spring事务
  • SpringBoot

  • Mybatis

  • Shiro

  • 常用框架
  • Spring
沉梦听雨
2024-11-28
目录

ThreadPoolTaskExecutor与ThreadPoolExecutor的区别

# ThreadPoolTaskExecutor 与 ThreadPoolExecutor 的区别

# 基本介绍

  1. ThreadPoolExecutor (Java Concurrency)
  • 包: java.util.concurrent
  • 用途: 基本的线程池执行器,提供了对线程池的基本管理功能。
  • 配置: 通过构造函数配置核心线程数、最大线程数、线程存活时间、任务队列等。
  • 功能:
    • 提供了对线程池的基本管理,如线程的创建、调度和销毁。
    • 支持直接提交任务、调度任务、延迟任务和周期性任务。
    • 可以通过 Executors 工具类创建常见类型的线程池,如固定大小线程池、缓存线程池等。
  1. ThreadPoolTaskExecutor (Spring Framework)
  • 包: org.springframework.scheduling.concurrent

  • 用途: Spring 提供的线程池执行器,扩展了 ThreadPoolExecutor,简化了线程池的配置和使用。

  • 配置: 通过 Java 配置或 XML 配置来设置核心线程数、最大线程数、队列容量等。

  • 功能:

    • 集成了 Spring 的 TaskExecutor 接口,方便在 Spring 应用中使用。
    • 提供了更高级的配置选项,如线程池的名称前缀、拒绝策略等。
    • 支持通过 Spring 的配置机制进行简化配置和管理。

# 创建示例

# ThreadPoolExecutor

可参考:

  • 配置线程池 | 沉梦听雨的编程指南 (opens new window)
  • 线程池详解 | 沉梦听雨的编程指南 (opens new window)
import java.util.concurrent.*;

public class ThreadPoolExecutorExample {
    public static void main(String[] args) {
        ExecutorService executor = new ThreadPoolExecutor(
            2, 4, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()
        );

        for (int i = 0; i < 10; i++) {
            executor.execute(() -> {
                System.out.println("Task executed by " + Thread.currentThread().getName());
            });
        }

        executor.shutdown();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# ThreadPoolTaskExecutor

@Configuration
public class MyAsyncConfig {

    @Bean(name = "myTaskExecutor")
    public ThreadPoolTaskExecutor myTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);
        executor.setMaxPoolSize(50);
        // 设置队列最大容量
        executor.setQueueCapacity(1000);
        executor.setThreadNamePrefix("myTaskExecutor-");
        executor.setKeepAliveSeconds(60);
        // 设置拒绝策略为 CallerRunsPolicy,表示当任务被拒绝时,将在调用者的线程中直接执行该任务
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
}

// 使用示例

@Service
public class MyService {

    @Autowired
    private Executor taskExecutor;

    @Async("myTaskExecutor")
    public void executeAsyncTask() {
        System.out.println("Task executed by " + Thread.currentThread().getName());
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 总结

  • ThreadPoolExecutor 是 Java 并发包中的基础线程池实现,适用于需要直接管理线程池配置和行为的场景。
  • ThreadPoolTaskExecutor 是 Spring 框架提供的扩展实现,简化了线程池的配置和管理,适用于 Spring 应用中的多线程任务执行。

# 学习参考

  • ThreadPoolTaskExecutor与ThreadPoolExecutor的区别及优缺点 - 每月工资一万八 - 博客园 (opens new window)
上次更新: 2024/12/31 17:34:27
异步注解相关
讲讲Spring事务

← 异步注解相关 讲讲Spring事务→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式