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