如果不自定义异步方法的线程池默认使用SimpleAsyncTaskExecutor。SimpleAsyncTaskExecutor:不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程。并发大的时候会产生严重的性能问题。
定义通用线程池
@EnableAsync
@Configuration
public class ThreadTestConfig {@Beanpublic Executor taskExecutor() {ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();pool.setCorePoolSize(5); //线程池活跃的线程数pool.setMaxPoolSize(10); //线程池最大活跃的线程数pool.setWaitForTasksToCompleteOnShutdown(true);pool.setThreadNamePrefix("lalala");return pool;}
}
@Async默认使用Bean Name为executor的线程池。也可以根据Bean Name指定特定线程池
@Async("taskExecuter")
public void asyncMethod() {
sleep(10);
System.out.println("async");
}