电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SpringBoot用@Async注解實現異步任務

瀏覽:4日期:2023-04-01 13:03:56
什么是異步調用?

異步調用是相對于同步調用而言的,同步調用是指程序按預定順序一步步執行,每一步必須等到上一步執行完后才能執行,異步調用則無需等待上一步程序執行完即可執行。

如何實現異步調用?

多線程,這是很多人第一眼想到的關鍵詞,沒錯,多線程就是一種實現異步調用的方式。

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

StrngBoot中則提供了很方便的方式執行異步調用。

異步接口的使用場景

耗時比較長,任務比較多的接口。比方說,文件下載,大文件下載比較耗時,這個時候就可以使用異步接口。

項目示例已上傳至GitHub,可見github項目地址。

   在解釋異步調用之前,我們先來看同步調用的定義;同步就是整個處理過程順序執行,當各個過程都執行完畢,并返回結果。 異步調用則是只是發送了調用的指令,調用者無需等待被調用的方法完全執行完畢;而是繼續執行下面的流程。

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

@Async介紹

基于@Async標注的方法稱為異步方法,方法在執行的時候,將會在獨立的線程中被執行,調用者無需等待它的完成,即可繼續其他的操作。使用時在SpringBoot主配置類中開啟異步即可。

@EnableAsync@SpringBootApplicationpublic class SpringBootAsyncTestApplication {無返回值異步方法

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

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

含返回值異步方法

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

返回值利用Future泛型接口實現。

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

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方法的作用是取消任務,取消任務成功則返回true,反之返回false。參數 mayInterruptIfRunning 表示是否允許取消正在執行卻沒有執行完畢的任務。

運行cancel方法取消任務時:

i.若任務已完成:則無論 mayInterruptIfRunning 為 true 或 false,此方法都返回 false,即取消已經完成的任務都會返回false。

i.若任務正在執行:

mayInterruptIfRunning 設置為 true,則返回true。 mayInterruptIfRunning 設置為false,則返回false。

iii.如果任務未執行,則無論mayInterruptIfRunning為true還是false,都返回true。

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

3.isDone方法的作用是判斷任務是否已經完成,若任務已完成,則返回true。

4.get()方法的作用是獲取執行結果,注意此方法會產生阻塞,等到任務執行完畢后才能獲得執行結果。

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

編寫測試接口

編寫/callWithNoReturnType和/callWithReturnType接口用于查看異步任務的執行過程。

@RestControllerpublic 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'; }

運行項目后使用Postman進行接口測試,分別給/callWithNoReturnType和/callWithReturnType接口發送Get請求,調用無返回值的異步方法asyncWithNoReturnType時,會立即返回返回值。但調用含返回值異步方法asyncWithReturnType時,由于我們調用了get()方法,會在等待3000毫秒后,才返回返回值。

SpringBoot用@Async注解實現異步任務

SpringBoot用@Async注解實現異步任務

到此這篇關于SpringBoot用@Async注解實現異步任務的文章就介紹到這了,更多相關SpringBoot @Async異步內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 小区健身器材_户外健身器材_室外健身器材_公园健身路径-沧州浩然体育器材有限公司 | 湖南自考_湖南自学考试| 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 桑茶-七彩贝壳桑叶茶 长寿茶 | 智能垃圾箱|垃圾房|垃圾分类亭|垃圾分类箱专业生产厂家定做-宿迁市传宇环保设备有限公司 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 聚合甘油__盐城市飞龙油脂有限公司 | 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | 自动配料系统_称重配料控制系统厂家 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 南京试剂|化学试剂|分析试剂|实验试剂|cas号查询-专业60年试剂销售企业 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 澳洁干洗店加盟-洗衣店干洗连锁「澳洁干洗免费一对一贴心服务」 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 全自动真空上料机_粉末真空上料机_气动真空上料机-南京奥威环保科技设备有限公司 | 制氮设备_PSA制氮机_激光切割制氮机_氮气机生产厂家-苏州西斯气体设备有限公司 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 丙烷/液氧/液氮气化器,丙烷/液氧/液氮汽化器-无锡舍勒能源科技有限公司 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 德州万泰装饰 - 万泰装饰装修设计软装家居馆| 氧化铝球_高铝球_氧化铝研磨球-淄博誉洁陶瓷新材料有限公司 | 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | 超声波清洗机_大型超声波清洗机_工业超声波清洗设备-洁盟清洗设备 | 柔软云母板-硬质-水位计云母片组件-首页-武汉长丰云母绝缘材料有限公司 | 热回收盐水机组-反应釜冷水机组-高低温冷水机组-北京蓝海神骏科技有限公司 | 噪声治理公司-噪音治理专业隔音降噪公司 | 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 | 伸缩器_伸缩接头_传力接头-巩义市润达管道设备制造有限公司 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 浙江上沪阀门有限公司| 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 萃取箱-萃取槽-PVC萃取箱厂家-混合澄清槽- 杭州南方化工设备 | 安徽集装箱厂-合肥国彩钢结构板房工程有限公司| 超声波反应釜【百科】-以马内利仪器| uv机-uv灯-uvled光固化机-生产厂家-蓝盾机电 |