摘要:定義異步方法,使用來返回異步調(diào)用的結(jié)果開始做任務(wù)一完成任務(wù)一,當(dāng)前線程,耗時(shí)毫秒任務(wù)一完成開始做任務(wù)二完成任務(wù)二,當(dāng)前線程,耗時(shí)毫秒任務(wù)二完成開始做任務(wù)三完成任務(wù)三,當(dāng)前線程,耗時(shí)毫秒任務(wù)三完成調(diào)用執(zhí)行異步回調(diào)異步回調(diào)結(jié)束調(diào)用結(jié)果開
定義異步方法,使用Future
@Async public Future調(diào)用firstTask() throws InterruptedException { System.out.println("開始做任務(wù)一"); long start = System.currentTimeMillis(); Thread.sleep(random.nextInt(10000)); long end = System.currentTimeMillis(); System.out.println("完成任務(wù)一,當(dāng)前線程:" + Thread.currentThread().getName() + ",耗時(shí):" + (end - start) + "毫秒"); return new AsyncResult<>("任務(wù)一完成"); } @Async public Future secondTask() throws InterruptedException { System.out.println("開始做任務(wù)二"); long start = System.currentTimeMillis(); Thread.sleep(random.nextInt(10000)); long end = System.currentTimeMillis(); System.out.println("完成任務(wù)二,當(dāng)前線程:" + Thread.currentThread().getName() + ",耗時(shí):" + (end - start) + "毫秒"); return new AsyncResult<>("任務(wù)二完成"); } @Async public Future thirdTask() throws InterruptedException { System.out.println("開始做任務(wù)三"); long start = System.currentTimeMillis(); Thread.sleep(random.nextInt(10000)); long end = System.currentTimeMillis(); System.out.println("完成任務(wù)三,當(dāng)前線程:" + Thread.currentThread().getName() + ",耗時(shí):" + (end - start) + "毫秒"); return new AsyncResult<>("任務(wù)三完成"); }
@GetMapping("test-future") public void testFuture() { try { Future調(diào)用結(jié)果result1 = asyncService.firstTask(); Future result2 = asyncService.secondTask(); Future result3 = asyncService.thirdTask(); while (true) { if (result1.isDone() && result2.isDone() && result3.isDone()) { System.out.println("執(zhí)行異步回調(diào)"); break; } } System.out.println("異步回調(diào)結(jié)束"); } catch (InterruptedException e) { e.printStackTrace(); } }
開始做任務(wù)一 開始做任務(wù)二 開始做任務(wù)三 完成任務(wù)二,當(dāng)前線程:task-2,耗時(shí):896毫秒 完成任務(wù)一,當(dāng)前線程:task-1,耗時(shí):7448毫秒 完成任務(wù)三,當(dāng)前線程:task-3,耗時(shí):7901毫秒 執(zhí)行異步回調(diào) 異步回調(diào)結(jié)束
代碼:異步回調(diào)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77587.html
摘要:定義模擬耗時(shí)操作調(diào)用失敗調(diào)用成功調(diào)用執(zhí)行順序循環(huán)循環(huán)調(diào)用成功代碼異步回調(diào) 定義ListenableFuture public void getListenableFuture() { ListenableFutureTask task = new ListenableFutureTask(new Callable() { @Override ...
摘要:上一章我們提到過與,對(duì)于具體的介紹沒說到,這一章我在這里簡單介紹一下,既然提到和,那肯定得提到什么是響應(yīng)式編程,什么是。 showImg(https://segmentfault.com/img/remote/1460000018819338?w=1024&h=500); 上一章我們提到過Mono 與 Flux,對(duì)于具體的介紹沒說到,這一章我在這里簡單介紹一下,既然提到Mono和Flu...
摘要:解決注解不回滾檢查你方法是不是的。之后新加入的注解,原來返回需要和配合。和為異步注解,放到方法上,表示調(diào)用該方法的線程與此方法異步執(zhí)行,需要配合注解使用。是中的標(biāo)注,是為了控制返回的字符串顯示哪些字段。 @SpringBootApplication = (默認(rèn)屬性)@Configuration + @EnableAutoConfiguration + @ComponentScan。 @...
摘要:主從多線程該模型將客戶端連接那一塊的線程也改為多線程,稱為主線程。同時(shí)也是多個(gè)子線程來處理事件響應(yīng),這樣無論是連接還是事件都是高性能的。多線程提高并發(fā)效率。 showImg(https://segmentfault.com/img/remote/1460000015484190?w=1399&h=876); 前言 在之前的 SpringBoot 整合長連接心跳機(jī)制 一文中認(rèn)識(shí)了 Net...
閱讀 770·2021-11-23 09:51
閱讀 2476·2021-10-11 11:10
閱讀 1351·2021-09-23 11:21
閱讀 1119·2021-09-10 10:50
閱讀 916·2019-08-30 15:54
閱讀 3357·2019-08-30 15:53
閱讀 3316·2019-08-30 15:53
閱讀 3223·2019-08-29 17:23