日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

spring async_Spring Async和Java的8 CompletableFuture

發(fā)布時(shí)間:2023/12/3 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring async_Spring Async和Java的8 CompletableFuture 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

spring async

眾所周知,我不是Spring的最大粉絲,但是當(dāng)時(shí)我在一個(gè)組織中工作,該組織使用Spring(以不同的形式和版本)維護(hù)了太多的項(xiàng)目。 我仍然對(duì)Spring持懷疑態(tài)度,當(dāng)然有一些很好的主意,有一些很好的(太多)抽象,有一些非常方便的“捷徑”來(lái)引導(dǎo)復(fù)雜的項(xiàng)目。 在這篇文章中,我不會(huì)詳細(xì)說(shuō)明我不喜歡的事情。

我喜歡Spring的文檔,這是他們的入門指南。 寫得好具體。 我正在通過(guò)SpringBoot / RestApi [ link ]閱讀有關(guān)“ 異步 ”方法執(zhí)行的簡(jiǎn)短指南。

這就是示例“ asynchronous” findUser()方法的實(shí)現(xiàn)。 完整的源代碼在這里 。

@Async public Future<User> findUser(String user) throws InterruptedException {System.out.println("Looking up " + user);User results = restTemplate.getForObject("https://api.github.com/users/" + user, User.class);// Artificial delay of 1s for demonstration purposesThread.sleep(1000L);return new AsyncResult<User>(results); }

我想知道為什么在示例中仍然有一個(gè)“ Future”,而我們已經(jīng)介紹了Java8 CompletableFuture 。 我猜想原始作者想保留與Java早期版本(6/7)的向后兼容性,因?yàn)镴ava以前沒(méi)有這種構(gòu)造 。

似乎其他人也有同樣的問(wèn)題,并在這里寫了一個(gè)很好的例子。 在其中的一條注釋中,您可以看到一個(gè)提示,即從4.2版及更高版本開始,Spring API將與已經(jīng)提供的Future&AsyncResult之上的CompletableFuture兼容。 我想,“ 很好,這是一個(gè)恥辱,為什么不嘗試甚至記錄下來(lái),因?yàn)槿绻腥耸褂么耸纠?#xff0c;他/她可能會(huì)保留當(dāng)前的實(shí)現(xiàn)方式 ” –為什么不使用某種標(biāo)準(zhǔn)?

因此,我決定做一個(gè)小小的更改,刪除Future并用CompletableFuture替換它,還注釋掉對(duì)Future.isDone()的調(diào)用,并用非常方便的CompletableFuture.allof()方法替換它。

因此,我更改了“服務(wù)”方法的返回類型,同時(shí)更新了調(diào)用方代碼-以同步所有3個(gè)期貨,一旦allof()完成,我們就可以打印結(jié)果。

package hello;import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future;import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate;@Service public class GitHubLookupService {RestTemplate restTemplate = new RestTemplate();@Asyncpublic CompletableFuture findUser(String user) throws InterruptedException {System.out.println("Looking up " + user);User results = restTemplate.getForObject("https://api.github.com/users/" + user, User.class);// Artificial delay of 1s for demonstration purposesThread.sleep(1000L);return CompletableFuture.completedFuture(results);}}

修改后的示例可以在此處找到。 我從Tomasz Nirkewicz找到了這個(gè)和這篇博客文章, 這是CompletableFuture豐富方法列表的非常不錯(cuò)且實(shí)用的指南。 我最喜歡的Devoxx演講者Jose Paumard也做了一個(gè)非常完整的演講,您可以在這里找到。

@Overridepublic void run(String... args) throws Exception {// Start the clocklong start = System.currentTimeMillis();// Kick of multiple, asynchronous lookupsCompletableFuture page1 = gitHubLookupService.findUser("PivotalSoftware");CompletableFuture page2 = gitHubLookupService.findUser("CloudFoundry");CompletableFuture page3 = gitHubLookupService.findUser("Spring-Projects");// Wait until they are all done//while (!(page1.isDone() && page2.isDone() && page3.isDone())) {// Thread.sleep(10); //10-millisecond pause between each check//}//wait until all they are completed.CompletableFuture.allOf(page1,page2,page3).join();//I could join as well if interested.// Print results, including elapsed timeSystem.out.println("Elapsed time: " + (System.currentTimeMillis() - start) +" ms");System.out.println(page1.get());System.out.println(page2.get());System.out.println(page3.get());}

鏈接

  • https://spring.io/guides/gs/async-method/
  • http://geowarin.github.io/completable-futures-with-spring-async.html
  • http://www.nurkiewicz.com/2013/05/java-8-completablefuture-in-action.html
  • http://www.nurkiewicz.com/2013/05/java-8-definitive-guide-to.html
  • https://github.com/javapapo/projects-from-blog/tree/master/spring-async-complfuture

翻譯自: https://www.javacodegeeks.com/2016/04/spring-async-javas-8-completablefuture.html

spring async

總結(jié)

以上是生活随笔為你收集整理的spring async_Spring Async和Java的8 CompletableFuture的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。