Rxjava调度不会在最后一行之后运行
我是RX的新手,不知道调度程序是如何工作的。下面是一些从未在完成时运行的代码。但是如果我在末尾放置Rxjava调度不会在最后一行之后运行,java,scheduler,reactive-programming,rx-java,Java,Scheduler,Reactive Programming,Rx Java,我是RX的新手,不知道调度程序是如何工作的。下面是一些从未在完成时运行的代码。但是如果我在末尾放置while(true)循环,它将正常工作。在运行新线程之前,应用程序将退出 为什么会这样?如何解决这个问题 Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onCompleted() { System.out
while(true)
循环,它将正常工作。在运行新线程之前,应用程序将退出
为什么会这样?如何解决这个问题
Subscriber<String> subscriber = new Subscriber<String>() {
@Override
public void onCompleted() {
System.out.println("done");
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onNext(String o) {
System.out.println(o);
}
};
Observable.from(new String[]{"1", "2", "3","4"}).
subscribeOn(Schedulers.immediate())
.observeOn(Schedulers.newThread())
.subscribe(subscriber);
Subscriber=newsubscriber(){
@凌驾
未完成的公共无效(){
系统输出打印项次(“完成”);
}
@凌驾
公共作废登记员(可丢弃){
}
@凌驾
public void onNext(字符串o){
系统输出打印ln(o);
}
};
从(新字符串[]{“1”、“2”、“3”、“4”})。
subscribeOn(Schedulers.immediate())
.observeOn(Schedulers.newThread())
.认购(认购人);
只需添加线程。睡眠(1000)如果程序过早退出,代码>将作为最后一条语句
至于为什么会这样
引述:
Java虚拟机将继续执行线程,直到发生以下任一情况:
所有不是守护进程线程的线程都已死亡
现在,如果我们看一下为调度程序生成线程的RxThreadFactory
:
公共最终类RxThreadFactory扩展了AtomicLong实现了ThreadFactory{
...
@凌驾
公共线程newThread(可运行的r){
线程t=新线程(r,前缀+递增和get());
t、 setDaemon(true);
返回t;
}
}
因此,更复杂的解决方案是使用Schedulers.from()
并使用自己的ThreadFactory
传入一个自定义Executor
,该执行器生成非守护进程线程。谢谢!但不仅仅是寻找一个有效的解决方案。寻找正确的道路。如果newThread
需要5秒钟怎么办?@sajad我已经扩展了我的答案