@Async含义:
- 在方法上使用此注解,申明该方法是一个异步任务
- 在类上使用此注解,申明该类中的方法都是异步任务
- 在使用此注解的类对象,必须为spring管理下的bean
- 想要使用此异步任务,需要在配置类上添加@EnableAsync注解
使用:
在Spring中启用@Async:
1,@Async注解在使用时,如果不指定线程池的名称,则使用Spring默认的线程池,Spring默认的线程池为SimpleAsyncTaskExecutor。
2,方法上一旦标记了这个@Async注解,当其它线程调用这个方法时,就会开启一个新的子线程去异步处理该业务逻辑。
代码示例:
@Configuration @EnableAsync public class ThreadPoolConfig { @Bean("fileTaskExecutor") public TaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // 设置核心线程数 8 executor.setCorePoolSize(8); // 设置最大线程数 16 executor.setMaxPoolSize(16); // 设置队列容量 1000 executor.setQueueCapacity(500); // 设置线程活跃时间(秒) executor.setKeepAliveSeconds(60); // 设置默认线程名称 executor.setThreadNamePrefix("myThread-"); // 设置拒绝策略 executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 等待所有任务结束后再关闭线程池 executor.setWaitForTasksToCompleteOnShutdown(true); executor.initialize(); return executor; } }
@Service public class MyAsyncTask { @Async("fileTaskExecutor") //使用自定义的线程池(执行器) public CompletableFuture<MyTask> asyncCpsItemImportTask(Sting value){ Task task = new MyTask(); //...具体业务逻辑 return CompletableFuture.completedFuture(task); } }
如何调用:
@Service public class LogService{ public void asyncCpsItemImportTask(String value){ List<CompletableFuture<MyTask>> result = new ArrayList<>(); //...具体业务逻辑 result.forEach(future -> { MyTask my =future.get(); //....具体业务 } } }
标签:线程,结合,CompletableFuture,executor,Async,public,注解 From: https://www.cnblogs.com/goPush/p/17143386.html