Async异步线程执行器的定义与使用

本文介绍了在Java后台如何使用多线程池实现异步处理,例如耗时任务、推送、短信发送等场景。通过配置`@EnableAsync`启动异步注解,并定义`ThreadPoolTaskExecutor`实现线程池,然后在服务方法上使用`@Async`注解标记异步执行的方法,如图片生成和文件打包。这样可以提高系统的并发处理能力并优化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java后台很多场景是需要异步去处理的,比如耗时比较的大的,以及当前任务关系不是很依赖的推送、发送短信、赠送卡券优惠券、打包zip等等。这个时候异步执行器会很方便。

1、定义多线程池

启用异步注解:@EnableAsync

ExecutorConfig.java


import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;

@Configuration
@EnableAsync
@Slf4j
public class ExecutorConfig {
   
   

    String executors = "10";//可以从配置文件中获取

    @Bean
    public Executor asyncServiceExecutor() {
   
   
        log.debug("开始配置 --> asyncServiceExecutor 异步线程执行器");
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //配置核心线程数
        executor.setCorePoolSize(Integer.parseInt(executors));
        //配置最大线程数
        executor.setMaxPoolSize(Integer.parseInt(executors));
        //配置队列大小
        executor.setQueueCapacity(0);
        //配置线程池中的线程的名称前缀
        executor.setThreadNamePrefix("async-service-");
        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
//        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        //执行初始化
        executor.initialize();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值