gpt4 book ai didi

java - RxJava : Using SubscribeOn makes the program exit without completing

转载 作者:行者123 更新时间:2023-11-30 07:56:47 24 4
gpt4 key购买 nike

这是我的示例代码

Observable.range(1,5)
.subscribeOn(Schedulers.computation())
.map(Observables05::doSomething)
.subscribe(System.out::println, Throwable::printStackTrace, () -> System.out.println("done"));

我的 doSomething 方法是,

public static int doSomething(int i) {
try {
System.out.println("Processing " + i +
" on Thread -- " + Thread.currentThread().getName());
Thread.sleep(500);
return i;
} catch (InterruptedException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

仅在我的主线程中使用示例代码就可以简单地退出程序。但是,如果在此之后使用 Thread.sleep(3000),则程序在 sleep 时间结束时退出之前会正常工作。

这是预期的行为吗?为什么?如何在不使用 Thread.sleep 的情况下运行此代码?

最佳答案

subscribeOn 调度 subscribe 对后台线程的调用(您已选择 computation 调度程序)。在此调度之后,您的主线程可以自由运行,即终止您的程序。

不知何故,您需要等待所有需要的任务完成才能退出。 Thread.sleep(3000) 完成简单测试用例的工作。

真正的程序通常不会那么快终止。仍然存在您需要等待某些后台任务完成的情况。您可以使用各种线程同步机制(例如 CountDownLatch)。

关于java - RxJava : Using SubscribeOn makes the program exit without completing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41851752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com