最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot用@Async注解實(shí)現(xiàn)異步任務(wù)

 更新時(shí)間:2020年12月28日 10:08:28   作者:Kellen5l  
這篇文章主要介紹了SpringBoot用@Async注解實(shí)現(xiàn)異步任務(wù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

什么是異步調(diào)用?

異步調(diào)用是相對(duì)于同步調(diào)用而言的,同步調(diào)用是指程序按預(yù)定順序一步步執(zhí)行,每一步必須等到上一步執(zhí)行完后才能執(zhí)行,異步調(diào)用則無需等待上一步程序執(zhí)行完即可執(zhí)行。

如何實(shí)現(xiàn)異步調(diào)用?

多線程,這是很多人第一眼想到的關(guān)鍵詞,沒錯(cuò),多線程就是一種實(shí)現(xiàn)異步調(diào)用的方式。

在非spring目項(xiàng)目中我們要實(shí)現(xiàn)異步調(diào)用的就是使用多線程方式,可以自己實(shí)現(xiàn)Runable接口或者集成Thread類,或者使用jdk1.5以上提供了的Executors線程池。

StrngBoot中則提供了很方便的方式執(zhí)行異步調(diào)用。

異步接口的使用場景

耗時(shí)比較長,任務(wù)比較多的接口。比方說,文件下載,大文件下載比較耗時(shí),這個(gè)時(shí)候就可以使用異步接口。

項(xiàng)目示例已上傳至GitHub,可見github項(xiàng)目地址。

   在解釋異步調(diào)用之前,我們先來看同步調(diào)用的定義;同步就是整個(gè)處理過程順序執(zhí)行,當(dāng)各個(gè)過程都執(zhí)行完畢,并返回結(jié)果。 異步調(diào)用則是只是發(fā)送了調(diào)用的指令,調(diào)用者無需等待被調(diào)用的方法完全執(zhí)行完畢;而是繼續(xù)執(zhí)行下面的流程。

   例如, 在某個(gè)調(diào)用中,需要順序調(diào)用 A, B, C三個(gè)過程方法;如他們都是同步調(diào)用,則需要將他們都順序執(zhí)行完畢之后,方算作過程執(zhí)行完畢; 如B為一個(gè)異步的調(diào)用方法,則在執(zhí)行完A之后,調(diào)用B,并不等待B完成,而是執(zhí)行開始調(diào)用C,待C執(zhí)行完畢之后,就意味著這個(gè)過程執(zhí)行完畢了。

@Async介紹

基于@Async標(biāo)注的方法稱為異步方法,方法在執(zhí)行的時(shí)候,將會(huì)在獨(dú)立的線程中被執(zhí)行,調(diào)用者無需等待它的完成,即可繼續(xù)其他的操作。使用時(shí)在SpringBoot主配置類中開啟異步即可。

@EnableAsync
@SpringBootApplication
public class SpringBootAsyncTestApplication {

無返回值異步方法

@Async
public void asyncMethodWithNoReturnType() {
  try {
    Thread.sleep(3000);
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  System.out.println("asyncMethodWithNoReturnType...");
}

使用方法比較簡單,編寫一個(gè)測試方法并加上@Async注解即可。

含返回值異步方法

@Async
public Future<String> asyncMethodWithReturnType() {
  try {
  		Thread.sleep(3000);
  		return new AsyncResult<String>("success");
  } catch (InterruptedException e) {
  		e.printStackTrace();
  }
  System.out.println("asyncMethodWithReturnType...");
  return null;
}

返回值利用Future泛型接口實(shí)現(xiàn)。

Future是對(duì)于具體的 Runnable 或者 Callable 任務(wù)的執(zhí)行結(jié)果進(jìn)行取消、查詢是否完成、獲取結(jié)果的接口,必要時(shí)可以通過get方法獲取執(zhí)行結(jié)果,該方法會(huì)阻塞直到任務(wù)返回結(jié)果,包含了以下幾個(gè)方法。

public interface Future<V> {
  boolean cancel(boolean mayInterruptIfRunning);
  
  boolean isCancelled();
  
  boolean isDone();

  V get() throws InterruptedException, ExecutionException;
  
  V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;
}

1.cancel方法的作用是取消任務(wù),取消任務(wù)成功則返回true,反之返回false。參數(shù) mayInterruptIfRunning 表示是否允許取消正在執(zhí)行卻沒有執(zhí)行完畢的任務(wù)。

運(yùn)行cancel方法取消任務(wù)時(shí):

i.若任務(wù)已完成:則無論 mayInterruptIfRunning 為 true 或 false,此方法都返回 false,即取消已經(jīng)完成的任務(wù)都會(huì)返回false。

i.若任務(wù)正在執(zhí)行:

  •  mayInterruptIfRunning 設(shè)置為 true,則返回true。
  • mayInterruptIfRunning 設(shè)置為false,則返回false。

iii.如果任務(wù)未執(zhí)行,則無論mayInterruptIfRunning為true還是false,都返回true。

2.isCancelled方法的作用是判斷任務(wù)是否被取消成功,若在任務(wù)正常完成前被取消,則返回 true。

3.isDone方法的作用是判斷任務(wù)是否已經(jīng)完成,若任務(wù)已完成,則返回true。

4.get()方法的作用是獲取執(zhí)行結(jié)果,注意此方法會(huì)產(chǎn)生阻塞,等到任務(wù)執(zhí)行完畢后才能獲得執(zhí)行結(jié)果。

5.get(long timeout, TimeUnit unit)方法的作用同樣是獲取執(zhí)行結(jié)果,若在指定時(shí)間內(nèi)還未獲取到執(zhí)行結(jié)果,則返回null。

編寫測試接口

編寫/callWithNoReturnType和/callWithReturnType接口用于查看異步任務(wù)的執(zhí)行過程。

@RestController
public class AsyncController {
  @Autowired
  AsyncService asynSerivce;

  @GetMapping("/callWithNoReturnType")
  public String callWithNoReturnType() {
    asynSerivce.asyncMethodWithNoReturnType();
    return "success";
  }

  @GetMapping("/callWithReturnType")
  public String callWithReturnType() {
    Future<String> future=asynSerivce.asyncMethodWithReturnType();
    try {
      return future.get();
    } catch (InterruptedException e) {
      e.printStackTrace();
    } catch (ExecutionException e) {
      e.printStackTrace();
    }
    return "fail";
  }

運(yùn)行項(xiàng)目后使用Postman進(jìn)行接口測試,分別給/callWithNoReturnType和/callWithReturnType接口發(fā)送Get請(qǐng)求,調(diào)用無返回值的異步方法asyncWithNoReturnType時(shí),會(huì)立即返回返回值。但調(diào)用含返回值異步方法asyncWithReturnType時(shí),由于我們調(diào)用了get()方法,會(huì)在等待3000毫秒后,才返回返回值。

到此這篇關(guān)于SpringBoot用@Async注解實(shí)現(xiàn)異步任務(wù)的文章就介紹到這了,更多相關(guān)SpringBoot @Async異步內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢

    springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢

    這篇文章主要介紹了springboot?jpa?實(shí)現(xiàn)返回結(jié)果自定義查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java獲取一個(gè)文本文件的編碼(格式)信息

    java獲取一個(gè)文本文件的編碼(格式)信息

    這篇文章主要介紹了java獲取一個(gè)文本文件的編碼(格式)信息,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • SpringBoot Admin健康檢查功能的實(shí)現(xiàn)

    SpringBoot Admin健康檢查功能的實(shí)現(xiàn)

    admin主要就是告訴運(yùn)維人員,服務(wù)出現(xiàn)異常,然后進(jìn)行通知(微信、郵件、短信、釘釘?shù)龋┛梢苑浅?焖偻ㄖ竭\(yùn)維人員,相當(dāng)報(bào)警功能,接下來通過本文給大家介紹SpringBoot Admin健康檢查的相關(guān)知識(shí),一起看看吧
    2021-06-06
  • futuretask用法及使用場景介紹

    futuretask用法及使用場景介紹

    這篇文章主要介紹了futuretask用法及使用場景介紹,小編覺得挺不錯(cuò)的,這里分享給大家,供大家參考。
    2017-10-10
  • idea中mapper如何快速跳轉(zhuǎn)到xml插件

    idea中mapper如何快速跳轉(zhuǎn)到xml插件

    這篇文章主要介紹了idea中mapper如何快速跳轉(zhuǎn)到xml插件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Spring boot框架下的RabbitMQ消息中間件詳解

    Spring boot框架下的RabbitMQ消息中間件詳解

    這篇文章詳細(xì)介紹了Spring Boot框架下的RabbitMQ消息中間件的基本概念、消息傳輸模型、環(huán)境準(zhǔn)備、Spring Boot集成以及消息生產(chǎn)和消費(fèi),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Java OOM原因以及解決方案

    Java OOM原因以及解決方案

    這篇文章主要介紹了Java OOM原因以及解決方案,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java日志組件間關(guān)系詳解

    Java日志組件間關(guān)系詳解

    在本文里我們給大家整理了關(guān)于Java日志組件間關(guān)系相關(guān)基礎(chǔ)知識(shí),需要的朋友們跟著學(xué)習(xí)下。
    2019-02-02
  • 詳細(xì)介紹Java中的各種鎖

    詳細(xì)介紹Java中的各種鎖

    不少同學(xué)開始慢慢接觸多線時(shí)候,對(duì)線程之間為了保障數(shù)據(jù)安全性,一致性有所了解,本文詳細(xì)解介紹java中的21種鎖 ,需要的朋友可以參考下
    2021-06-06
  • Java避免死鎖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java避免死鎖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    在有些情況下死鎖是可以避免的。本文將展示三種用于避免死鎖的技術(shù)。對(duì)java避免死鎖的相關(guān)知識(shí)感興趣的朋友一起通過本文學(xué)習(xí)吧
    2017-06-06

最新評(píng)論

临漳县| 花垣县| 星子县| 普宁市| 江门市| 漠河县| 砀山县| 东台市| 军事| 巴青县| 江城| 兴国县| 兴城市| 女性| 宁阳县| 遂宁市| 韶山市| 兰西县| 从化市| 来宾市| 牙克石市| 穆棱市| 浦城县| 旺苍县| 韶关市| 大足县| 科尔| 彭阳县| 体育| 榆林市| 柳江县| 虞城县| 长武县| 原阳县| 定远县| 肥西县| 绥滨县| 泰兴市| 隆子县| 瑞金市| 饶河县|