使用rx-java的异步抽象
生活随笔
收集整理的這篇文章主要介紹了
使用rx-java的异步抽象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對我而言,使用Rx-java的最大好處之一就是無論底層調用是同步還是異步,因此代碼看起來都完全相同,因此該條目的標題也是如此。
考慮一個非常簡單的客戶端代碼用例,它執行三個緩慢運行的調用并將結果合并到一個列表中:
由于呼叫是同步的,因此花費的時間會增加。 為了模擬慢速調用,以下是每個方法調用中的實現類型:
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" }因此,在這些實現中使用rx-java的第一個嘗試是簡單地讓這些長時間運行的操作返回通用類型Observable ,一個糟糕的實現看起來像這樣:
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"); }因此,調用方實現將更改為以下內容:
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();查看調用者如何使用merge方法組合結果。
但是,此時每個服務調用的調用仍是同步的,為了使調用中斷,可以通過以下方式使服務調用使用線程池:
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運行實際操作。
該方法的優點在于,該服務的調用代碼根本沒有更改,那里的實現與以前完全相同,而服務調用現在是異步的。 如果您有興趣進一步探索這個樣本, 這里是一個GitHub庫一起工作的例子。
翻譯自: https://www.javacodegeeks.com/2015/02/async-abstractions-using-rx-java.html
總結
以上是生活随笔為你收集整理的使用rx-java的异步抽象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是 最外层电子数 最外层电子数简单介
- 下一篇: 潍坊为什么叫鸢都 潍坊叫鸢都的原因