RxJava - 主要杀死可观察的线程

Bye*_*Bye 1 java multithreading rx-java

为什么主线程杀死了我的 rxJava 线程?

public static void main(final String[] args) throws Exception {
    Observable.just(10)
        .subscribeOn(Schedulers.newThread())
        .subscribe(i -> print(i));
    Thread.sleep(100);
}

private static void print(final int i) {
    try {
        Thread.sleep(5000);
    } catch(final InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)

print方法阻塞线程 5000 毫秒,我认为 JVM 正在等待应用程序下的所有线程被终止。在这种情况下,执行程序后关闭,我在控制台中看Thread.sleep(100)不到。10

注意:如果我将使用自定义执行器,那么Executors.newFixedThreadPool(1);它将等到关闭,但使用Schedulers.newThread()它则不会。

And*_*nin 5

Schedulers.newThread()将充当守护线程:如果主线程完成 - 守护线程不会阻止 JVM 关闭。在此示例中,这个新(守护程序)线程将进入print方法并等待 5 秒,而主线程将仅等待 0.1 秒并刚刚完成main方法执行。就这样...