亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

怎么在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

丹东市| 汉阴县| 天水市| 若羌县| 金昌市| 永平县| 萍乡市| 嘉兴市| 伊通| 郧西县| 磐石市| 通海县| 荥阳市| 合水县| 义乌市| 双峰县| 桓仁| 滦平县| 东港市| 资源县| 千阳县| 平定县| 杭锦后旗| 南平市| 太康县| 天门市| 罗山县| 扬州市| 苍南县| 务川| 昌都县| 平昌县| 汉源县| 新密市| 怀来县| 柯坪县| 桂林市| 交城县| 尼玛县| 林口县| 格尔木市|