创建异步线程池

package net.crisps.cloud.order.settle.common.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;

/**
* @Description: 异步线程池配置类
* @Author Created by xu.shen on 2019-05-03 .
* @Copyright © HOT SUN group.All Rights Reserved.
**/
@Configuration
@EnableAsync
public class ThreadAsyncConfigurer implements AsyncConfigurer {

private final static Logger log = LoggerFactory.getLogger(ThreadAsyncConfigurer.class);

@Bean(name = "getAsyncExecutor")
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor threadPool = new ThreadPoolTaskExecutor();
// 设置核心线程数
threadPool.setCorePoolSize(Runtime.getRuntime().availableProcessors()*2);
// 设置最大线程数
threadPool.setMaxPoolSize(Runtime.getRuntime().availableProcessors()*4);
// 线程池所使用的缓冲队列
threadPool.setQueueCapacity(100);
// 等待任务在关机时完成--表明等待所有线程执行完
threadPool.setWaitForTasksToCompleteOnShutdown(true);
// 等待时间 (默认为0,此时立即停止),并没等待xx秒后强制停止
threadPool.setAwaitTerminationSeconds(60);
threadPool.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 初始化线程
threadPool.initialize();
return threadPool;
}
}

线程池使用,等待所有线程走完才继续之后逻辑代码

@Resource
private ThreadAsyncConfigurer threadAsyncConfigurer;
Executor executor = threadAsyncConfigurer.getAsyncExecutor();

// 二级分类 商机id 去企大顺查询角色
CompletableFuture future1 = CompletableFuture.runAsync(()->
selectQdsRole(placeOrderRequest.getBusinessId(), placeOrderRequest.getCusOrderId(), placeOrderRequest.getOrderSkuDetailList()
, placeOrderRequest.getOrderTime(), placeOrderRequest.getCustomerId())
,executor);

// 产品id集合 key商品id 去产品中心查询角色 服务产品、服务资源 销售商品的id (产品包id)
CompletableFuture future2 = CompletableFuture.runAsync(() ->
selectProRole(placeOrderRequest.getCusOrderId(), placeOrderRequest.getOrderSkuDetailList()
,placeOrderRequest.getOrderSaleSkuList(), placeOrderRequest.getOrderTime(),placeOrderRequest.getOrderSkuList())
,executor);

//查询订单相关相关
CompletableFuture future3 = CompletableFuture.runAsync(() ->
selectOrderRole(placeOrderRequest.getCustomerId(), placeOrderRequest.getCusOrderId(), placeOrderRequest.getUserId()
, placeOrderRequest.getBusinessOneNo(), placeOrderRequest.getOrderSkuDetailList(), placeOrderRequest.getOrderTime())
,executor);

// 查询商户中心角色--渠道引入人 商户id集合
CompletableFuture future4 = CompletableFuture.runAsync(() ->
selectMerRole(placeOrderRequest.getOrderSkuDetailList(),placeOrderRequest.getOrderSaleSubjectId(),placeOrderRequest.getOrderSplitList()
, placeOrderRequest.getOrderTime(),placeOrderRequest.getCusOrderId())
,executor);

// 查询用户中心角色--拉新人 用户id 拉新合伙人 成交合伙人 静默渗透人
CompletableFuture future5 = CompletableFuture.runAsync(() ->
selectUserRole(placeOrderRequest.getOrderSkuDetailList(),placeOrderRequest.getOrderCus(),placeOrderRequest.getCusOrderId(),placeOrderRequest.getUserId()
, placeOrderRequest.getOrderTime())
,executor);

CompletableFuture.allOf(future1,future2,future3,future4,future5).join(); // 之后逻辑代码 ......