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;
    }
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM