我使用observeOn来观察另一个线程中的一个observable:
Observable.just("Hello", "world!").observeOn(Schedulers.io()).subscribe(System.out::println);
但是这段代码不会总是输出" Hello world!"。 PublishSubject也是如此:
PublishSubject<String> subject = PublishSubject.create();
subject.observeOn(Schedulers.io()).subscribe(System.out::println);
subject.onNext("Hello");
subject.onNext("world!");
为什么这段代码并不总是打印出来&#34; Hello world!&#34; ?我认为,至少在第二个样本中,订阅将收到这两个消息,因为它在onNext调用之前订阅。有没有办法接收这两条消息?
答案 0 :(得分:0)
IO调度程序需要一些时间准备就绪。
当您使用onNext发出项目时,它尚未就绪,因此您错过了它。
答案 1 :(得分:0)
RxJava调度程序底层的线程都是守护程序线程,如果所有其他非守护程序线程都已完成,它们将由JVM停止。如果从static void main()
运行示例,则很可能在其他线程有可能运行之前,main()
方法将终止,因此不会执行打印代码。
根据您希望观察序列的方式,您可以在Observable链上使用toBlocking()
,或在CountDownLatch
方法实现中使用countDown()
和onCompleted()
。< / p>