随笔 - 441  文章 - 4  评论 - 84  阅读 - 109万 

1.说明

在springboot 中使用 @Async 实现异步任务处理,下面介绍一下如何实现这个。

2.实现代码

2.1 增加@EnableAsync


@EnableAsync
public class Demo1Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo1Application.class, args);
    }

}

2.2 构造一个线程池

实现异步时,我们需要手工构造一个线程池,否则会出现内存泄漏的问题。


@Configuration
public class AsyncThreadPoolConfig {

    private static final int MAX_POOL_SIZE = 20;
    private static final int CORE_POOL_SIZE = 10;
    private static final int TASK_NUM = 200;
    private static final int ACTIVE_TIME = 60;

    @Bean("myExecutor")
    public AsyncTaskExecutor asyncTaskExecutor() {
        ThreadPoolTaskExecutor asyncTaskExecutor = new ThreadPoolTaskExecutor();
        asyncTaskExecutor.setMaxPoolSize(MAX_POOL_SIZE);
        asyncTaskExecutor.setCorePoolSize(CORE_POOL_SIZE);
        asyncTaskExecutor.setQueueCapacity(TASK_NUM);
        asyncTaskExecutor.setKeepAliveSeconds(ACTIVE_TIME);
        asyncTaskExecutor.setThreadNamePrefix("laozhang_");
        asyncTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        asyncTaskExecutor.initialize();
        return asyncTaskExecutor;
    }

}

2.3 使用注解

@Component
public class AsyncTest {

    @Async(value = "myExecutor")
    public  void longTime() throws InterruptedException {
        System.err.println("----------------start----------------");
        Thread.sleep(5000);
        System.err.println("----------------end----------------");
    }
}

增加一个@Async注解,表示这个方法会使用异步处理

posted on   自由港  阅读(128)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-05-13 VUEX 状态管理
点击右上角即可分享
微信分享提示