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