springBoot使用threadPoolTaskExecutor多线程
2023-12-13 18:20:27
- 在springboot设置Configuration类,配置线程池参数,同时设置@EnableAsync注解
@EnableAsync
@SpringBootConfiguration
public class ThreadPoolConfig {
@Value("${threadpool.corePoolSize}")
private int corePoolSize;
@Value("${threadpool.maxPoolSize}")
private int maxPoolSize;
@Value("${threadpool.queueCapacity}")
private int queueCapacity;
@Value("${threadpool.keepAliveSeconds}")
private int keepAliveSeconds;
@Bean
public ThreadPoolTaskExecutor threadPoolTaskExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setKeepAliveSeconds(keepAliveSeconds);
executor.setThreadNamePrefix("ThreadPoolTaskExecutor-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}
2. 配置执行任务类,
# 因为我们使用的是返回异步结果,所以要继承Callable类
public class abcTask implements Callable<ReturnValue> {
#异步任务中无法使用自动注入,所以需要用构造函数传入参数
public abc(){}
#写入任务逻辑
@override
public ReturnValue call() throw Exception {
}
- 在main中调用多线程任务
#创建一个list用于接收多线程执行结果
List<Future<abc>> futures = new ArrayList<>();
for (abc1 abc1 : acbs) {
FutureTask futureTask = new FutureTask<abc>(new abcTask());
#如果需要返回结果的话,这里就使用submit,如果不需要返回结果的话就使用
threadPoolTaskExecutor.submit(futureTask);
futures.add(futureTask);
}
#使用for方法从futures list中获取多线程的返回结果
文章来源:https://blog.csdn.net/wangchuang227/article/details/134974009
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!