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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

spring async_Spring Async和Java的8 CompletableFuture

發布時間:2023/12/3 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring async_Spring Async和Java的8 CompletableFuture 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

spring async

眾所周知,我不是Spring的最大粉絲,但是當時我在一個組織中工作,該組織使用Spring(以不同的形式和版本)維護了太多的項目。 我仍然對Spring持懷疑態度,當然有一些很好的主意,有一些很好的(太多)抽象,有一些非常方便的“捷徑”來引導復雜的項目。 在這篇文章中,我不會詳細說明我不喜歡的事情。

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

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

@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); }

我想知道為什么在示例中仍然有一個“ Future”,而我們已經介紹了Java8 CompletableFuture 。 我猜想原始作者想保留與Java早期版本(6/7)的向后兼容性,因為Java以前沒有這種構造 。

似乎其他人也有同樣的問題,并在這里寫了一個很好的例子。 在其中的一條注釋中,您可以看到一個提示,即從4.2版及更高版本開始,Spring API將與已經提供的Future&AsyncResult之上的CompletableFuture兼容。 我想,“ 很好,這是一個恥辱,為什么不嘗試甚至記錄下來,因為如果有人使用此示例,他/她可能會保留當前的實現方式 ” –為什么不使用某種標準?

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

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

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找到了這個和這篇博客文章, 這是CompletableFuture豐富方法列表的非常不錯且實用的指南。 我最喜歡的Devoxx演講者Jose Paumard也做了一個非常完整的演講,您可以在這里找到。

@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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。