Java中的@Async異步功能詳解
Java中的@Async異步功能詳解
@Async注解,可以實(shí)現(xiàn)異步處理的功能,它可以有返回值,或者直接在新線程時(shí)并行執(zhí)行一個(gè)任務(wù),對(duì)于異步來(lái)說(shuō),它的執(zhí)行是有條件的,你需要把異步代碼塊放在單獨(dú)的類里,當(dāng)spring在注入時(shí),才不會(huì)相互影響,因?yàn)楫惒绞且粋€(gè)比較特殊的代理。
異步入口
@EnableAsync
具體的異步方法
/** * 異常的類型應(yīng)該和同步執(zhí)行的類分開(kāi),這樣在ioc建立時(shí)不會(huì)相互干擾 */ @Service public class MessageService { @Async public void msg1() throws Exception { Thread.sleep(5000L); System.out.println("async1:" + LocalDateTime.now() + ",id:" + Thread.currentThread().getId()); } }
上面代碼中的異步,是一個(gè)沒(méi)有返回值的,一般像發(fā)送消息可以采用這種方式。
帶有返回值的異步
@Async public Future<String> asyncMethodWithReturnType() { System.out.println("Execute method asynchronously - " + Thread.currentThread().getName()); try { Thread.sleep(5000); return new AsyncResult<String>("hello world !!!!"); } catch (InterruptedException e) { // } return null; }
這種會(huì)返回一個(gè)委托對(duì)象Future,我們?nèi)绻M玫剿姆祷貢r(shí),需要在主程序中去監(jiān)聽(tīng)它,就是寫(xiě)在循環(huán),去等待它的返回結(jié)果。
Future<String> future = messageService.asyncMethodWithReturnType(); while (true) { ///這里使用了循環(huán)判斷,等待獲取結(jié)果信息 if (future.isDone()) { //判斷是否執(zhí)行完畢 System.out.println("Result from asynchronous process - " + future.get()); break; } System.out.println("Continue doing something else. "); System.out.println("main end:" + LocalDateTime.now() + ",id:" + Thread.currentThread().getId()); }
上面代碼主程序在執(zhí)行到異步方法時(shí),由于遇到了while(true),所以會(huì)租塞,直到有返回結(jié)果為止。
到此這篇關(guān)于Java中的@Async異步功能詳解的文章就介紹到這了,更多相關(guān)@Async異步功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決DataInputStream?read不等于-1,socket文件傳輸只能傳輸一個(gè)文件無(wú)法傳輸多個(gè)問(wèn)題
這篇文章主要介紹了解決DataInputStream?read不等于-1,socket文件傳輸只能傳輸一個(gè)文件無(wú)法傳輸多個(gè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08淺談synchronized方法對(duì)非synchronized方法的影響
下面小編就為大家?guī)?lái)一篇淺談synchronized方法對(duì)非synchronized方法的影響。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10簡(jiǎn)單了解spring bean的循環(huán)引用
這篇文章主要介紹了簡(jiǎn)單了解spring bean的循環(huán)引用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

IDEA中Java出現(xiàn)無(wú)效的源發(fā)行版錯(cuò)誤的解決辦法