我正在摆弄 RxJava 和调度程序。我用调度程序实现了一个非常简单的流:
Observable.just(1, 2, 3)
.doOnNext(v -> Thread.currentThread().getName())
.subscribeOn(Schedulers.newThread())
.subscribe(v -> System.out.println(v));
上面的例子打印nothing在控制台中。
我注意到,当我最后使用 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
uses daemon
线程。所以你的应用程序会在你之前完成Observable
开始发射。查起来很简单,通过就可以了Scheduler
返回非daemon
线程,您将看到您的输出值:
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);
并且值不会被打印。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)