第一种方式、使用Springboot集成异步线程调用
-
在需要异步执行的方法上加上@Async注解(标明要异步调用)
@Async //标明当前方法是一个异步方法 public void demo() { //代码略 }
-
在引导类中使用@EnableAsync注解开启异步调用
@EnableAsync //开启异步调用 @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class,args); }
第二种方式、自定义线程池
-
先自定义一个线程池并注入容器中
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; @Configuration @EnableAsync//开启异步调用 public class AsyncConfig { @Bean("name")//给bean一个名字 public Executor getExecutor(){ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(Runtime.getRuntime().availableProcessors()); executor.setMaxPoolSize(50); executor.setQueueCapacity(10); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.setThreadNamePrefix("给一个线程名");//可要可不要 return executor; } ...... //可以定义多个bean }
-
在需要异步执行的方法上加上@Async注解(标明要异步调用)
-
@Async(value = "name") //标明当前方法是一个异步方法,通过bean的名字选择用哪个bean
public void demo() {
//代码略
}