SpringBoot啟動多線程


新建一個線程池的配置類,需要被spring掃描到。

@Configuration  
@EnableAsync  
public class ThreadExecutorConfig {  
  
    @Bean  
    public Executor executor() {  
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();  
        executor.setCorePoolSize(20);//線程池維護線程的最少數量  
        executor.setMaxPoolSize(50);//線程池維護線程的最大數量  
        executor.setQueueCapacity(15);//緩存隊列  
        executor.setThreadNamePrefix("ssmsExecutor-");  
        /** 
         * 對拒絕task的處理策略 
         rejection-policy:當pool已經達到max size的時候,如何處理新任務 
         CALLER_RUNS:不在新線程中執行任務,而是由調用者所在的線程來執行 
         */  
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());  
        executor.setKeepAliveSeconds(60);//允許的空閑時間  
        executor.initialize();  
        return executor;  
    }  
  
} 

  添加一個普通類,里面編寫需要執行的方法,方法加上@Async注解,調用方法時自動啟動線程。

@Component  
public class BmtOrderThread {  
      
    @Async  
    public Future<Map<String,Object>> test1() {  
        Map<String,Object> result=new HashMap<String,Object>();  
        return new AsyncResult<>(result);  
    }  
      
    @Async  
    public void test2() {  
        System.out.println("hello");  
    }  
}

  調用有返回值的線程方法:

public static void main(String[] args) {      
    List<Future<Map<String,Object>>> futures = new ArrayList<>();//存線程的返回結果  
      
    //以下調用會啟動線程進行執行,多線程並發     
    Future<Map<String,Object>> res1=bmtOrderThread.test1();  
    futures.add(res1);  
    Future<Map<String,Object>> res2=bmtOrderThread.test1();  
    futures.add(res2);  
      
    //會等待所有線程都執行結束,拿到結果   
    try {  
        for(Future future:futures) {  
            Object obj=future.get();  
            Map<String,Object> result=(Map<String,Object>)obj;  
        }  
    } catch(Exception e) {  
        e.printStackTrace();  
    }  
}  

  調用無返回值的線程方法:

public static void main(String[] args) {  
    //以下方法會啟動多線程,並發執行  
    bmtOrderThread.test1();  
    bmtOrderThread.test1();  
    bmtOrderThread.test1();  
} 

  

參考的博客:

https://blog.csdn.net/qq_39385706/article/details/79365849

https://blog.csdn.net/weixin_38399962/article/details/82146480

https://www.cnblogs.com/guyezhai/p/5776357.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM