gpt4 book ai didi

java - RxJava Schedulers.io 在 Maven 项目中不起作用

转载 作者:行者123 更新时间:2023-11-29 08:25:25 24 4
gpt4 key购买 nike

我在 Intellij IDEA 中创建了一个 maven 项目,我正在尝试执行以下简单的 rxjava 代码

Observable.just(1,2,3,4)
.observeOn(Schedulers.io())
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println(integer);
}
});

我希望结果 1 , 2 , 3 , 4 打印在 io 线程中。但是当我运行代码时,它不打印任何东西。如果我删除 observeOn(Schedulers.io) ,那么它会在主线程中按预期打印。我创建了一个自定义线程池,如下所示

Executor executor = Executors.newFixedThreadPool(1);
Observable.just(1,2,3,4)
.observeOn(Schedulers.from(executor))
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println(integer);
}
});

这工作正常。 Schedulers.newThread()Schedulers.computation() 线程也正常工作。只有 Schedulers.io 在代码中没有效果。这是为什么?

下面是我对Rxjava的依赖

  <dependency>
<groupId>io.reactivex.rxjava2</groupId>
<artifactId>rxjava</artifactId>
<version>2.2.4</version>
</dependency>

最佳答案

RxJava Schedulers.io() 调度器使用守护线程。

A daemon thread is a thread that does not prevent the JVM from exiting when the program finishes but the thread is still running. An example for a daemon thread is the garbage collection.

source

在您的第一个示例中,main 方法完成,程序终止,因此您看不到任何输出。在 main 方法的末尾添加 Thread.sleep() 将延迟退出,您应该能够看到输出。

我假设 Executors.newFixedThreadPool(1) 不使用守护线程,因此它会阻止 main 方法退出,您会看到不同的输出。

关于java - RxJava Schedulers.io 在 Maven 项目中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53682216/

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