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()它则不会。
Schedulers.newThread()将充当守护线程:如果主线程完成 - 守护线程不会阻止 JVM 关闭。在此示例中,这个新(守护程序)线程将进入print方法并等待 5 秒,而主线程将仅等待 0.1 秒并刚刚完成main方法执行。就这样...
| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |