gpt4 book ai didi

java - 为什么我的 RxJava 计时器应用程序不终止?

转载 作者:行者123 更新时间:2023-12-01 07:48:28 28 4
gpt4 key购买 nike

我有一个使用 RxJava 2 的简单应用程序:

public static void main(final String[] args) {

final Scheduler scheduler = Schedulers.from(Executors.newCachedThreadPool());

final Observable<String> ticker = Observable.interval(1L, TimeUnit.SECONDS)
.take(10)
.subscribeOn(scheduler)
.map(x -> x + "s");

ticker.subscribe(x -> {
System.out.println(x);
});
}

它正确打印计时器 10 次:

0s
1s
2s
3s
4s
5s
6s
7s
8s
9s

但是,应用程序在 9s 后不会终止。似乎有某种线索让它保持活力。

我应该如何实现这个,以便应用程序在 ticker 完成后终止?

最佳答案

该问题与 RxJava 无关,而是与 Executors.newCachedThreadPool() 有关,根据 JVM 规范,控制台应用程序将不会退出,直到所有非守护线程已执行完毕。 (或显式调用 System.exit())。
现在 newCachedThreadPool 执行器将线程保留在缓存中以供将来使用,并且仅在 60 秒不使用后才会关闭线程(请参阅文档),所以这里发生的是 RxJava 使用此缓存中的线程然后在发出所有项目后,您需要等待 60 秒应用程序退出(只需运行它并等待)。

顺便说一下,interval() 默认作用于 computation Scheduler,您可以使用也获取 的重载来覆盖它Scheduler 作为参数。

关于java - 为什么我的 RxJava 计时器应用程序不终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44178879/

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