@Configuration
@EnableAsync
public class AsyncConfig {
@Bean("getTaskExector")
public Executor taskExecutor() {
//通过Runtime方法来获取当前服务器cpu内核,根据cpu内核来创建核心线程数和最大线程数
int threadCount = Runtime.getRuntime().availableProcessors();
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(threadCount);
executor.setMaxPoolSize(threadCount);
executor.setQueueCapacity(200);
executor.setKeepAliveSeconds(60);
executor.setThreadNamePrefix("taskExecutor-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
}
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;
import java.util.concurrent.Future;
@Component
public class Async {
@Async("getTaskExector")
public void doTaskThree() throws Exception {
System.out.println("开始做任务三");
long start = System.currentTimeMillis();
Thread.sleep(10000);
long end = System.currentTimeMillis();
System.out.println("完成任务三,耗时:" + (end - start) + "毫秒");
}
}
public static void main(String[] args) {
Async async = new Async();
for (int i=0;i<=20;i++){
async.doTaskThree();
}
}
springboot中@Async多线程注解使用_背景模版-CSDN博客
SpringBoot异步多线程调用注解@Async使用和CountDownLatch配合使用案例_背景模版-CSDN博客