中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在SpringBoot中異步調用方法并接收返回值

發布時間:2021-05-21 16:26:24 來源:億速云 閱讀:427 作者:Leah 欄目:編程語言

怎么在SpringBoot中異步調用方法并接收返回值?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

步驟1:配置線程池,添加@Configuration和@EnableAsync注解

@Configuration
@EnableAsync
public class ExecutorConfig {
 
 
  /**
   * 線程池
   *
   * @return
   */
  @Bean(name = "asyncExecutor")
  public Executor asyncExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(10);
    executor.setMaxPoolSize(15);
    executor.setQueueCapacity(25);
    executor.setKeepAliveSeconds(200);
    executor.setThreadNamePrefix("async-");
    executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
    // 等待所有任務都完成再繼續銷毀其他的Bean
    executor.setWaitForTasksToCompleteOnShutdown(true);
    // 線程池中任務的等待時間,如果超過這個時候還沒有銷毀就強制銷毀,以確保應用最后能夠被關閉,而不是阻塞住
    executor.setAwaitTerminationSeconds(60);
    executor.initialize();
    return executor;
  }
 
 
}

步驟2:定義方法A,方法B,方法C,方法D

@Service
public class AsyncService {
 
  @Async("asyncExecutor")
  public Future<Integer> methodB(){
    try{
      Thread.sleep(1000);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return new AsyncResult<>(1);
  }
 
  @Async("asyncExecutor")
  public Future<Integer> methodC(){
    try{
      Thread.sleep(2000);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return new AsyncResult<>(2);
  }
 
  @Async("asyncExecutor")
  public Future<Integer> methodD(){
    try{
      Thread.sleep(3000);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return new AsyncResult<>(3);
  }
}
@GetMapping("test")
  public Integer methodA() throws Exception{
    long start = System.currentTimeMillis();
    Future<Integer> future1 = asyncService.methodB();
    Future<Integer> future2 = asyncService.methodC();
    Future<Integer> future3 = asyncService.methodD();
    Integer x = future1.get();
    Integer y = future2.get();
    Integer z = future3.get();
    long end = System.currentTimeMillis();
    System.out.println("耗時:" + (end - start));
    return x + y +z;
  }
}

結果:

怎么在SpringBoot中異步調用方法并接收返回值

怎么在SpringBoot中異步調用方法并接收返回值

springboot是什么

springboot一種全新的編程規范,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程,SpringBoot也是一個服務于框架的框架,服務范圍是簡化配置文件。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山阴县| 建宁县| 措勤县| 伊宁县| 大英县| 永泰县| 镇巴县| 嵊泗县| 台南市| 资溪县| 文化| 涡阳县| 屏东县| 温州市| 赤水市| 察哈| 南宫市| 卢氏县| 巨野县| 咸丰县| 汨罗市| 利川市| 安阳县| 江都市| 双江| 海原县| 屏东县| 临湘市| 九江市| 河北省| 马公市| 信阳市| 建湖县| 庄浪县| 西华县| 科尔| 绥宁县| 伊宁县| 浦城县| 永仁县| 汾西县|