1.1、@Bean注入的线程池
// future 使用的线程池
@Configuration
public class ThreadPoolConfig {
@Bean(value = "callbackExecutor")
public ThreadPoolTaskExecutor callbackExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setThreadNamePrefix("futureThreadPool");
taskExecutor.setCorePoolSize(20);
taskExecutor.setKeepAliveSeconds(300);
taskExecutor.setMaxPoolSize(100);
taskExecutor.setQueueCapacity(400);
taskExecutor.initialize();
return taskExecutor;
}
}
1.2、注入线程池处理异步任务
@Resource
private ThreadPoolTaskExecutor callbackExecutor;
public List<T> func(){
List<Callable<T>> TCallableList = new ArrayList<>();
for(int i = 0;i < len;i++){
Callable<T> callable = () -> {
//如数据库操作,函数操作
//处理任务返回类型为T
};
TCallableList.add(callable);
}
try {
List<Future<T>> TFutureList = callbackExecutor
.getThreadPoolExecutor()
// 提交一批任务并等待它们全部完成
.invokeAll(TCallableList);
List<T> TList = new ArrayList<>();
for (Future<T> future : TFutureList) {
TList.add(future.get());
}
return TList;
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
文章来源地址https://www.toymoban.com/news/detail-653482.html
文章来源:https://www.toymoban.com/news/detail-653482.html
到了这里,关于Java使用线程池异步处理并返回结果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!