线程池——Executor、Executors、ExecutorService、ThreadPoolExecutor、ThreadPoolTaskExecutor之间的区别

本文详细介绍了Java并发编程中的Executor接口、其子接口ExecutorService以及其实现类ThreadPoolExecutor和ScheduledExecutorService的功能。此外,还涵盖了Spring中的ThreadPoolTaskExecutor的使用方法和配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.util.concurrent.Executor 负责线程的使用和调度的根接口
|–ExecutorService 子接口: 线程池的主要接口
|–ThreadPoolExecutor 线程池的实现类
|–ScheduledExceutorService 子接口: 负责线程的调度
|–ScheduledThreadPoolExecutor : 继承ThreadPoolExecutor,实现了ScheduledExecutorService

 

ExecutorService 接口继承了Executor 接口,是Executor 的子接口 

    1.Executor接口中定义了execute()方法,用来接收一个Runnable接口的对象,而ExecutorService接口中定义的submit()方法可以接收Runnable和Callable接口对象。

    2.Executor接口中execute()方法不返回任何结果,而ExecutorService接口中submit()方法可以通过一个 Future 对象返回运算结果。

    3.Executor和ExecutorService除了允许客户端提交一个任务,ExecutorService 还提供用来控制线程池的方法。
    比如:调用 shutDown() 方法终止线程池

Executors 类提供工厂方法用来创建不同类型的

### JavaExecutors ThreadPoolExecutor区别 #### Executor 接口层次结构 `Executors` 并不是一个具体的线程池实现,而是提供了若干静态工厂方法来创建不同类型的线程池。这些线程池最终都是基于 `ThreadPoolExecutor` 实现的[^2]。 #### 创建方式的不同 - **Executors 工具类** 使用 `Executors` 类可以通过调用其提供的静态方法快速获得预定义配置好的几种常见类型线程池实例,比如固定大小、缓存型以及单一线程等特殊用途的线程池。 - **ThreadPoolExecutor 手动构建** 而如果想要更精细地控制线程池的行为,则可以直接使用 `ThreadPoolExecutor` 构造器来自定义核心线程数量、最大线程数量、保持活动时间、工作队列以及其他属性[^3]。 ```java // 使用 Executors 创建新固定的线程池 ExecutorService fixedPool = Executors.newFixedThreadPool(10); // 自定义 ThreadPoolExecutor 参数 ThreadPoolExecutor customPool = new ThreadPoolExecutor( 5, // 核心线程数 10,// 最大线程数 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>() ); ``` #### 配置灵活性对比 由于 `Executors` 返回的对象通常具有较为简单的内部逻辑设定,在某些复杂应用场景下可能无法完全满足需求;相反,直接操作 `ThreadPoolExecutor` 则能够给予开发者更大的自由度去调整各项参数以适应具体业务场景的要求[^4]。 #### 功能特性上的差异 除了基本的任务提交功能外,`ThreadPoolExecutor` 还支持更多高级特性的定制化选项,例如设置不同的拒绝策略处理超出容量范围之外的新任务请求,或是指定特定的工作队列类型影响任务排队机制等等[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值