首页 > 解决方案 > RxJava - 主要杀死可观察线程

问题描述

为什么主线程正在杀死我的 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);
}

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

注意:如果我将使用自定义 Executor,Executors.newFixedThreadPool(1);它会等到关机,但Schedulers.newThread()不会。

标签: javamultithreadingrx-java

解决方案


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


推荐阅读