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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用rx-java的异步抽象

發(fā)布時間:2023/12/3 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用rx-java的异步抽象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

對我而言,使用Rx-java的最大好處之一就是無論底層調(diào)用是同步還是異步,因此代碼看起來都完全相同,因此該條目的標題也是如此。

考慮一個非常簡單的客戶端代碼用例,它執(zhí)行三個緩慢運行的調(diào)用并將結(jié)果合并到一個列表中:

String op1 = service1.operation(); String op2 = service2.operation(); String op3 = service3.operation(); Arrays.asList(op1, op2, op3)

由于呼叫是同步的,因此花費的時間會增加。 為了模擬慢速調(diào)用,以下是每個方法調(diào)用中的實現(xiàn)類型:

public String operation() {logger.info("Start: Executing slow task in Service 1");Util.delay(7000);logger.info("End: Executing slow task in Service 1");return "operation1" }

因此,在這些實現(xiàn)中使用rx-java的第一個嘗試是簡單地讓這些長時間運行的操作返回通用類型Observable ,一個糟糕的實現(xiàn)看起來像這樣:

public Observable<string> operation() {logger.info("Start: Executing slow task in Service 1");Util.delay(7000);logger.info("End: Executing slow task in Service 1");return Observable.just("operation 1"); }

因此,調(diào)用方實現(xiàn)將更改為以下內(nèi)容:

Observable<String> op1 = service1.operation(); Observable<String> op2 = service2.operation(); Observable<String> op3 = service3.operation();Observable<List<String>> lst = Observable.merge(op1, op2, op3).toList();

查看調(diào)用者如何使用merge方法組合結(jié)果。

但是,此時每個服務調(diào)用的調(diào)用仍是同步的,為了使調(diào)用中斷,可以通過以下方式使服務調(diào)用使用線程池:

public class Service1 {private static final Logger logger = LoggerFactory.getLogger(Service1.class);public Observable<String> operation() {return Observable.<String>create(s -> {logger.info("Start: Executing slow task in Service 1");Util.delay(7000);s.onNext("operation 1");logger.info("End: Executing slow task in Service 1");s.onCompleted();}).subscribeOn(Schedulers.computation());} }

subscriptionOn使用指定的Scheduler運行實際操作。

該方法的優(yōu)點在于,該服務的調(diào)用代碼根本沒有更改,那里的實現(xiàn)與以前完全相同,而服務調(diào)用現(xiàn)在是異步的。 如果您有興趣進一步探索這個樣本, 這里是一個GitHub庫一起工作的例子。

翻譯自: https://www.javacodegeeks.com/2015/02/async-abstractions-using-rx-java.html

總結(jié)

以上是生活随笔為你收集整理的使用rx-java的异步抽象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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