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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

冷热复位_冷热rx-java可观察

發(fā)布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 冷热复位_冷热rx-java可观察 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

冷熱復(fù)位

我自己對“熱和冷可觀測”的理解還很不穩(wěn)定,但這是我到目前為止所了解的!

冷觀測

考慮一個返回rx-java Observable的API:

import obs.Util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import rx.Observable; import rx.schedulers.Schedulers;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(1000);s.onNext("data 1");logger.info("End: Executing slow task in Service 1");s.onCompleted();}).subscribeOn(Schedulers.computation());} }

現(xiàn)在,首先要注意的是,典型的Observable在訂閱之前不會做任何事情:

所以基本上,如果我要這樣做:

Observable<String> op1 = service1.operation();

除非通過以下方式在Observable上進行訂閱,否則不會打印或返回任何內(nèi)容:

Observable<String> op1 = service1.operation();CountDownLatch latch = new CountDownLatch(1);op1.subscribe(s -> logger.info("From Subscriber 1: {}", s),e -> logger.error(e.getMessage(), e),() -> latch.countDown());latch.await();

因此,現(xiàn)在,如果此Observable上有多個訂閱,會發(fā)生什么情況:

Observable<String> op1 = service1.operation();CountDownLatch latch = new CountDownLatch(3);op1.subscribe(s -> logger.info("From Subscriber 1: {}", s),e -> logger.error(e.getMessage(), e),() -> latch.countDown());op1.subscribe(s -> logger.info("From Subscriber 2: {}", s),e -> logger.error(e.getMessage(), e),() -> latch.countDown());op1.subscribe(s -> logger.info("From Subscriber 3: {}", s),e -> logger.error(e.getMessage(), e),() -> latch.countDown());latch.await();

有了冷的可觀察到的代碼,代碼將再次被調(diào)用并再次發(fā)出項目,這在我的機器上得到了:

06:04:07.206 [RxComputationThreadPool-2] INFO o.b.Service1 - Start: Executing slow task in Service 1 06:04:07.208 [RxComputationThreadPool-3] INFO o.b.Service1 - Start: Executing slow task in Service 1 06:04:08.211 [RxComputationThreadPool-2] INFO o.b.BasicObservablesTest - From Subscriber 2: data 1 06:04:08.211 [RxComputationThreadPool-1] INFO o.b.BasicObservablesTest - From Subscriber 1: data 1 06:04:08.211 [RxComputationThreadPool-3] INFO o.b.BasicObservablesTest - From Subscriber 3: data 1 06:04:08.213 [RxComputationThreadPool-2] INFO o.b.Service1 - End: Executing slow task in Service 1 06:04:08.214 [RxComputationThreadPool-1] INFO o.b.Service1 - End: Executing slow task in Service 1 06:04:08.214 [RxComputationThreadPool-3] INFO o.b.Service1 - End: Executing slow task in Service 1

熱可觀察–使用ConnectableObservable

另一方面,Hot Observable確實不需要訂閱即可開始發(fā)射項目。 一種實現(xiàn)Hot Observable的方法是使用ConnectableObservable ,它是一個Observable,它在調(diào)用connect方法之前不會發(fā)出項目,但是一旦開始發(fā)出項目,它的任何訂閱者只能從訂閱點獲取項目。 因此,再次回顧前面的示例,但使用ConnectableObservable代替:

Observable<String> op1 = service1.operation();ConnectableObservable<String> connectableObservable = op1.publish();CountDownLatch latch = new CountDownLatch(3);connectableObservable.subscribe(s -> logger.info("From Subscriber 1: {}", s),e -> logger.error(e.getMessage(), e),() -> latch.countDown());connectableObservable.subscribe(s -> logger.info("From Subscriber 2: {}", s),e -> logger.error(e.getMessage(), e),() -> latch.countDown());connectableObservable.subscribe(s -> logger.info("From Subscriber 3: {}", s),e -> logger.error(e.getMessage(), e),() -> latch.countDown());connectableObservable.connect();latch.await();

并打印以下內(nèi)容:

06:07:23.852 [RxComputationThreadPool-3] INFO o.b.Service1 - Start: Executing slow task in Service 1 06:07:24.860 [RxComputationThreadPool-3] INFO o.b.ConnectableObservablesTest - From Subscriber 1: data 1 06:07:24.862 [RxComputationThreadPool-3] INFO o.b.ConnectableObservablesTest - From Subscriber 2: data 1 06:07:24.862 [RxComputationThreadPool-3] INFO o.b.ConnectableObservablesTest - From Subscriber 3: data 1 06:07:24.862 [RxComputationThreadPool-3] INFO o.b.Service1 - End: Executing slow task in Service 1

熱點可觀察–使用主題

將冷的Observable轉(zhuǎn)換為高溫的另一種方法是使用Subject 。 主題既表現(xiàn)為可觀察者,又表現(xiàn)為觀察者,有不同類型的主題具有不同的行為。 在這里,我使用一個名為PublishSubject的Subject,它具有Pub / Sub行為–這些項目被發(fā)送給所有在其上監(jiān)聽的訂閱者。 因此,隨著PublishSubject的引入,代碼如下所示:

Observable<String> op1 = service1.operation();PublishSubject<String> publishSubject = PublishSubject.create();op1.subscribe(publishSubject);CountDownLatch latch = new CountDownLatch(3);publishSubject.subscribe(s -> logger.info("From Subscriber 1: {}", s),e -> logger.error(e.getMessage(), e),() -> latch.countDown());publishSubject.subscribe(s -> logger.info("From Subscriber 2: {}", s),e -> logger.error(e.getMessage(), e),() -> latch.countDown());publishSubject.subscribe(s -> logger.info("From Subscriber 3: {}", s),e -> logger.error(e.getMessage(), e),() -> latch.countDown());latch.await();

了解如何將PublishSubject作為Observable的訂閱者引入,而其他訂閱者則如何訂閱PublishSubject。 輸出將類似于ConnectableObservable的輸出。

從本質(zhì)上來說,這就是我對“熱可觀察”的理解程度。 因此,總而言之,Cold和Hot Observable之間的區(qū)別在于訂戶何時獲得發(fā)射的項目以及何時發(fā)射項目–使用Cold Observable,它們在訂閱并通常獲得所有發(fā)射的項目時發(fā)射,一個Hot Observable,項目將在沒有訂閱服務(wù)器的情況下發(fā)出,而訂閱者通常會在訂閱點之后獲得項目。

參考

  • http://www.introtorx.com/content/v1.0.10621.0/14_HotAndColdObservables.html
  • Rx-java上的優(yōu)秀Javadoc – http://reactivex.io/RxJava/javadoc/index.html
  • 翻譯自: https://www.javacodegeeks.com/2015/03/hot-and-cold-rx-java-observable.html

    冷熱復(fù)位

    總結(jié)

    以上是生活随笔為你收集整理的冷热复位_冷热rx-java可观察的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 日日操狠狠操 | 国产毛片不卡 | 欧美性理论片在线观看片免费 | 本田岬av | 国语对白永久免费 | 国产视频一区二区在线 | 欧美熟妇另类久久久久久不卡 | 国产欧美精品 | 日韩1区 | 国产人成在线观看 | 极品探花在线 | 激情小说视频在线 | 亚洲青春草 | 午夜污污 | 色偷偷成人 | 免费黄色a| 女性爱爱视频 | 毛片在线不卡 | www夜片内射视频日韩精品成人 | 91福利小视频| 97狠狠| 国产精品精华液网站 | 日韩视频在线视频 | 麻豆系列 | 91亚洲一线产区二线产区 | 亚洲精品9 | 免费在线看黄的网站 | 中文字幕一区二区三区在线视频 | 在线综合av | 欧美一区,二区 | 欧美日韩国产免费观看 | 久久99精品国产.久久久久久 | 国产+高潮+白浆+无码 | 亚色视频在线 | 91av视频在线 | 日韩精品久久久久久免费 | 欧美 日韩 国产 成人 在线 | 久久久久一区二区精码av少妇 | 日本公妇乱淫免费视频一区三区 | 人妻少妇偷人精品视频 | 国产白丝av | 亚洲高清无码久久久 | 午夜神器在线观看 | 日本国产在线观看 | 免费啪 | 色综合av综合无码综合网站 | 精品一区二区三区中文字幕 | 天天干天天噜 | 久久资源365 | 久久先锋 | 完全免费av | 97成人超碰 | 免费在线看视频 | 日韩国产激情 | 亚洲最大成人网站 | 欧美在线色 | 四虎精品在线 | 天堂视频一区 | 国语对白av | 新超碰97 | 毛片网在线| 日韩精品视频久久 | 亚洲日本激情 | 国产精品蜜 | 国产成人av无码精品 | 日本一区二区三区视频在线 | 欧美激情一区二区三区四区 | 韩国日本中文字幕 | 黄色小视频免费看 | 李丽珍毛片 | 成人在线观看免费 | 69xxx少妇按摩视频 | 日产精品久久久 | 青青色在线 | 日日狠狠| 自拍视频一区 | 国产精品天美传媒入口 | 国产成人三级在线观看 | 青青青国产 | av性天堂网 | 五月天av在线 | 麻豆国产av超爽剧情系列 | 美女免费网站 | 69**夜色精品国产69乱 | 国产日韩亚洲 | 伊人网视频在线 | wwwwxxx日本| 午夜视 | 黄色在线免费观看 | 国产日韩激情 | 亚洲精品国产精品国自产观看 | 内裤摩擦1v1h | 一本色道久久综合亚洲精品图片 | 日韩欧美网 | 精品久久久久久久 | 青青草视频在线免费观看 | 久久99久久99精品免视看婷婷 | 成人夜晚看av | 久久久久97|