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----------------");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。