使用调度器时,System.out.println在RxJava中不打印任何内容
我在摆弄RxJava和调度器。我用调度器实现了一个非常简单的流:使用调度器时,System.out.println在RxJava中不打印任何内容,java,multithreading,scheduler,rx-java,Java,Multithreading,Scheduler,Rx Java,我在摆弄RxJava和调度器。我用调度器实现了一个非常简单的流: Observable.just(1, 2, 3) .doOnNext(v -> Thread.currentThread().getName()) .subscribeOn(Schedulers.newThread()) .subscribe(v -> System.out.println(v)); 上面的示例在控制台中不打印任何内容 我注意到,当我在末尾使用thread.slee
Observable.just(1, 2, 3)
.doOnNext(v -> Thread.currentThread().getName())
.subscribeOn(Schedulers.newThread())
.subscribe(v -> System.out.println(v));
上面的示例在控制台中不打印任何内容
我注意到,当我在末尾使用thread.sleep()阻塞主线程时,System.out.println会打印正确的值-1 2 3:
Observable.just(1, 2, 3)
.doOnNext(v -> Thread.currentThread().getName())
.subscribeOn(Schedulers.newThread())
.subscribe(v -> System.out.println(v));
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
有人能帮我理解这种行为吗?
RXJava
使用daemon
线程。所以你的应用程序在你的Observable
开始发射之前就完成了。很容易检查,只需传递调度程序
,它返回非守护进程
线程,您将看到您的输出值:
Scheduler scheduler = Schedulers.from(Executors.newCachedThreadPool(new ThreadFactory() {
@Override public Thread newThread(Runnable r) {
Thread result = new Thread(r);
//result.setDaemon(true);
return result;
}
}));
Observable.just(1, 2, 3)
.subscribeOn(scheduler)
.subscribe(v -> print(v));
取消注释行result.setDaemon(true)代码>和值将不会打印