spring启动异步线程

 大纲:

  1. spring启动异步线程
  2. spring配置线程池

一、spring启动异步线程

spring启动异步线程方法就是在方法上加上注解@Async,然后启动类或配置类上加上注解@EnableAsync

@Service
public class TestService {
    @Async
    public Future exec(){
        Future future = new AsyncResult("dududududu");
        System.out.println(Thread.currentThread().getName()+111111);
        return future;
    }
}

这种方式在每次执行这个方法的时候都会启动一个线程去执行这个方法。Future可以返回执行结果,这个方法也可以返回void。

二、spring配置线程池

@Configuration
@EnableAsync
public class Config {
    @Bean
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(2);
        executor.setMaxPoolSize(3);
        executor.setQueueCapacity(200);
        executor.setKeepAliveSeconds(60);
        executor.setThreadNamePrefix("aaaaaa-");
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        return executor;
    }

    @Bean
    public Executor taskExecutor1() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(2);
        executor.setMaxPoolSize(3);
        executor.setQueueCapacity(200);
        executor.setKeepAliveSeconds(60);
        executor.setThreadNamePrefix("bbbbbbb-");
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        return executor;
    }
}

上面的配置文件配置了2个线程池

应用的时候在@Async的值里配置上线程池的名称就可以了

@Service
public class TestService {
    @Async("taskExecutor1")//使用上面配置的taskExecutor1线程池
    public Future exec(){
        Future future = new AsyncResult("dududududu");
        System.out.println(Thread.currentThread().getName()+111111);
        return future;
    }
}
原文地址:https://www.cnblogs.com/liuboyuan/p/11584016.html