线程池的创建和使用

1、使用线程工厂创建

    public static ExecutorService newCachedThreadPool() {
        // 使用 ThreadFactoryBuilder 创建自定义线程名称的 ThreadFactory
        ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
            .setNameFormat("audit-update-pool-%d").build();

        // 创建线程池,其中任务队列需要结合实际情况设置合理的容量
        ThreadPoolExecutor executor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(),
            Runtime.getRuntime().availableProcessors(),
            1,
            TimeUnit.MINUTES,
            new LinkedBlockingQueue<>(1024),
            namedThreadFactory,
            new ThreadPoolExecutor.AbortPolicy());
        return executor;
    }
}


//使用
    private static ExecutorService executorService = ThreadPoolUtil.newCachedThreadPool();


        executorService.submit(new UpdateAuditTask(orderCode, sopPurchaseOrderDAO,merchantUserMapper,
            flowInstanceSDKService, ticketNo, initiationPlaceDiamond.getPurchaseFlowId()));

2、注入bean的方式

@Configuration
@EnableAsync
@Slf4j
public class ExecutorConfig {

    @Bean
    public Executor asyncServiceExecutor() {
        log.info("初始化线程池");
        
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //配置核心线程数
        executor.setCorePoolSize(5);
        //配置最大线程数
        executor.setMaxPoolSize(10);
        //配置队列大小
        executor.setQueueCapacity(99999);
        //配置线程池中的线程的名称前缀
        executor.setThreadNamePrefix("async-service-tms");

        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        //执行初始化
        executor.initialize();
        return executor;
    }

    @Bean("asyncNBFServiceExecutor")
    public Executor asyncNBFServiceExecutor() {
        log.info("nbf初始化线程池");

        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //配置核心线程数
        executor.setCorePoolSize(5);
        //配置最大线程数
        executor.setMaxPoolSize(10);
        //配置队列大小
        executor.setQueueCapacity(99999);
        //配置线程池中的线程的名称前缀
        executor.setThreadNamePrefix("async-nbf-tms");

        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
        // DiscardPolicy:当线程池添加失败,则放弃不处理
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
        //执行初始化
        executor.initialize();
        return executor;
    }

}

使用

@Resource
    private Executor asyncServiceExecutor;

 //异步触发一次
        RpcContext_inner rpcContext = EagleEye.getRpcContext();
        asyncServiceExecutor.execute(() -> {
            try {
                EagleEye.setRpcContext(rpcContext);
                autoDeliveryByNumTask.perform(taskDTO);
            } catch (Throwable e1) {
                log.error("autoDeliveryByNumTask fail", e1);
            } finally {
                EagleEye.clearRpcContext();
            }
        });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值