java - 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()
不会。
解决方案
Schedulers.newThread()
将充当守护线程:如果主线程完成 - 守护线程不会阻止 JVM 关闭。在这个例子中,这个新的(守护进程)线程将进入print
方法并等待 5 秒,而主线程将仅等待 0.1 秒并完成main
方法执行。就这样...
推荐阅读
- kotlin - 如何获取泛型变量的实例类型
- nuxt.js - NuxtJS2 和 Cloudinary 上传 API:如何从 Cloudinary 中删除资产?
- mysql - 如何按 RAND() 排序并随机设置 LIMIT?
- javacard - 提供共享密钥 - JavaCard Applet
- python - 无法估算缺失的数值
- java - Java 格式化 - 某些数据未对齐
- ibm-cloud - 无法在 IBM Cloud Lite 上部署 Node RED
- sql - 将 postgres 主键和外键从 varchar 更改为 uuid
- c# - 如何使用 MassTransit 连接两个 RabbitMQ 服务器
- r - R:合并部分匹配的数据