ThreadPoolTaskExecutor与ThreadPoolExecutor的区别
# ThreadPoolTaskExecutor 与 ThreadPoolExecutor 的区别
# 基本介绍
ThreadPoolExecutor
(Java Concurrency)
- 包:
java.util.concurrent
- 用途: 基本的线程池执行器,提供了对线程池的基本管理功能。
- 配置: 通过构造函数配置核心线程数、最大线程数、线程存活时间、任务队列等。
- 功能:
- 提供了对线程池的基本管理,如线程的创建、调度和销毁。
- 支持直接提交任务、调度任务、延迟任务和周期性任务。
- 可以通过
Executors
工具类创建常见类型的线程池,如固定大小线程池、缓存线程池等。
ThreadPoolTaskExecutor
(Spring Framework)
包:
org.springframework.scheduling.concurrent
用途: Spring 提供的线程池执行器,扩展了
ThreadPoolExecutor
,简化了线程池的配置和使用。配置: 通过 Java 配置或 XML 配置来设置核心线程数、最大线程数、队列容量等。
功能:
- 集成了 Spring 的
TaskExecutor
接口,方便在 Spring 应用中使用。 - 提供了更高级的配置选项,如线程池的名称前缀、拒绝策略等。
- 支持通过 Spring 的配置机制进行简化配置和管理。
- 集成了 Spring 的
# 创建示例
# ThreadPoolExecutor
可参考:
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
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
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 应用中的多线程任务执行。
# 学习参考
上次更新: 2024/12/31 17:34:27