Rxjava调度不会在最后一行之后运行

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

我是RX的新手,不知道调度程序是如何工作的。下面是一些从未在完成时运行的代码。但是如果我在末尾放置
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我已经扩展了我的答案