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

RxJava Schedulers.io doesn't work in maven project

我在 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 方法退出,您会看到不同的输出。