激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Boot利用@Async異步調用:使用Future及定義超時詳解

Spring Boot利用@Async異步調用:使用Future及定義超時詳解

2021-04-25 11:43翟永超 Java教程

這篇文章主要給大家介紹了關于Spring Boot利用@Async異步調用:使用Future及定義超時的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring boot具有一定的參考學習價值,需要的朋友可以參考下

前言

之前連續寫了幾篇關于使用@Async實現異步調用的內容,也得到不少童鞋的反饋,其中問題比較多的就是關于返回Future的使用方法以及對異步執行的超時控制,所以這篇就來一起講講這兩個問題的處理。

如果您對于@Async注解的使用還不了解的話,可以看看之前的文章,具體如下:

定義異步任務

首先,我們先使用@Async注解來定義一個異步任務,這個方法返回Future類型,具體如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@Slf4j
@Component
public class Task {
 public static Random random = new Random();
 @Async("taskExecutor")
 public Future<String> run() throws Exception {
  long sleep = random.nextInt(10000);
  log.info("開始任務,需耗時:" + sleep + "毫秒");
  Thread.sleep(sleep);
  log.info("完成任務");
  return new AsyncResult<>("test");
 }
}

Tips:什么是Future類型?

Future是對于具體的Runnable或者Callable任務的執行結果進行取消、查詢是否完成、獲取結果的接口。必要時可以通過get方法獲取執行結果,該方法會阻塞直到任務返回結果。

它的接口定義如下:

?
1
2
3
4
5
6
7
8
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;
}

它聲明這樣的五個方法:

  • cancel方法用來取消任務,如果取消任務成功則返回true,如果取消任務失敗則返回false。參數mayInterruptIfRunning表示是否允許取消正在執行卻沒有執行完畢的任務,如果設置true,則表示可以取消正在執行過程中的任務。如果任務已經完成,則無論mayInterruptIfRunning為true還是false,此方法肯定返回false,即如果取消已經完成的任務會返回false;如果任務正在執行,若mayInterruptIfRunning設置為true,則返回true,若mayInterruptIfRunning設置為false,則返回false;如果任務還沒有執行,則無論mayInterruptIfRunning為true還是false,肯定返回true。
  • isCancelled方法表示任務是否被取消成功,如果在任務正常完成前被取消成功,則返回 true。
  • isDone方法表示任務是否已經完成,若任務完成,則返回true;
  • get()方法用來獲取執行結果,這個方法會產生阻塞,會一直等到任務執行完畢才返回;
  • get(long timeout, TimeUnit unit)用來獲取執行結果,如果在指定時間內,還沒獲取到結果,就直接返回null。

也就是說Future提供了三種功能:

  1. 判斷任務是否完成;
  2. 能夠中斷任務;
  3. 能夠獲取任務執行結果。

測試執行與定義超時

在完成了返回Future的異步任務定義之后,我們來嘗試實現一個單元測試來使用這個Future完成任務的執行,比如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class ApplicationTests {
 @Autowired
 private Task task;
 @Test
 public void test() throws Exception {
  Future<String> futureResult = task.run();
  String result = futureResult.get(5, TimeUnit.SECONDS);
  log.info(result);
 }
}

上面的代碼中,我們在get方法中還定義了該線程執行的超時時間,通過執行這個測試我們可以觀察到執行時間超過5秒的時候,這里會拋出超時異常,該執行線程就能夠因執行超時而釋放回線程池,不至于一直阻塞而占用資源。

完整示例:

讀者可以根據喜好選擇下面的兩個倉庫中查看Chapter4-1-4項目:

Github:https://github.com/dyc87112/SpringBoot-Learning/

Gitee:https://gitee.com/didispace/SpringBoot-Learning/

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://blog.didispace.com/springbootasync-4/

延伸 · 閱讀

精彩推薦
  • Java教程mybatis調用存儲過程的實例代碼

    mybatis調用存儲過程的實例代碼

    這篇文章主要介紹了mybatis調用存儲過程的實例,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    動力節點11732021-01-25
  • Java教程Java開發常見異常及解決辦法詳解

    Java開發常見異常及解決辦法詳解

    這篇文章主要介紹了java程序常見異常及處理匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考...

    cutercorley12252021-12-18
  • Java教程mybatis批量新增、刪除、查詢和修改方式

    mybatis批量新增、刪除、查詢和修改方式

    這篇文章主要介紹了mybatis批量新增、刪除、查詢和修改方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教...

    xuforeverlove7492022-01-24
  • Java教程Spring Cloud Gateway 如何修改HTTP響應信息

    Spring Cloud Gateway 如何修改HTTP響應信息

    這篇文章主要介紹了Spring Cloud Gateway 修改HTTP響應信息的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教...

    帷幄庸者13712021-10-13
  • Java教程淺談java 中equals和==的區別

    淺談java 中equals和==的區別

    這篇文章主要介紹了java 中equals和==的區別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小...

    獨特潤許多人5982021-07-21
  • Java教程二進制中1的個數

    二進制中1的個數

    這篇文章介紹了二進制中1的個數,有需要的朋友可以參考一下 ...

    java之家2662019-10-15
  • Java教程Spring 6.0 將停止支持 Freemarker 和 JSP

    Spring 6.0 將停止支持 Freemarker 和 JSP

    Spring Framework 6.0 第一個里程碑版本已經發布,目前已經可以從Spring Repo獲取。這里有一些新變更我們可以提前了解一下。...

    碼農小胖哥12642021-12-31
  • Java教程淺談sql_@SelectProvider及使用注意說明

    淺談sql_@SelectProvider及使用注意說明

    這篇文章主要介紹了sql_@SelectProvider及使用注意說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教...

    icecoola_6892021-11-04
主站蜘蛛池模板: 麻豆视频观看 | 精品一区二区三区免费看 | 久久美女免费视频 | 成人国产精品齐天大性 | 国内精品伊人久久 | 香蕉久草在线 | 日韩黄色片免费看 | 羞羞视频.www在线观看 | 欧美日韩在线看片 | 成人三级黄色片 | 欧美三区在线 | 成人午夜毛片 | 色交视频 | 精品中文字幕在线播放 | 成人黄视频在线观看 | 成年人免费视频播放 | 国产精品视频六区 | 亚洲欧美一区二区三区在线观看 | 91九色福利 | 黄色高清免费网站 | 免费久久久久久 | 欧美视频在线观看一区 | 欧美日韩在线播放一区 | 日本中文字幕电影在线观看 | 精品久久久久久久久久久久久久久久久久久 | 中午日产幕无线码1区 | 久久蜜桃香蕉精品一区二区三区 | 极品国产91在线网站 | 福利在线小视频 | 精品一区二区三区免费毛片 | 国产精品久久久毛片 | 久草在线视频新 | 在线播放黄色片 | 国产精品一区视频 | www.91操| 久久久久久久久久久高潮一区二区 | 黄网站在线免费 | 国产999在线| 免费小毛片 | 国产精品午夜未成人免费观看 | 天天舔天天插 |