【发布时间】:2021-01-10 07:14:49
【问题描述】:
我在 RxJava 代码中将 java.util.concurrent.ExecutorService 用于调度程序线程池:
public class Test {
ExecutorService poolA = newFixedThreadPool(10, threadFactory("Scheduler-A-%d"));
Scheduler schedulerA = Schedulers.from(poolA);
private ThreadFactory threadFactory(String pattern) {
return new ThreadFactoryBuilder()
.setNameFormat(pattern).build();
}
@Test
public void testSubscribeOn() {
log("Starting");
final Observable<String> obs = simple();
log("Created");
obs
.doOnNext(Utils::log)
.map(x -> x+1)
.doOnNext(Utils::log)
.subscribeOn(schedulerA)
.map(x -> x+2)
.doOnNext(Utils::log)
.subscribe(
x -> log("Got " + x),
Throwable::printStackTrace,
() -> log("Completed"));
log("exiting");
}
}
public class Utils {
private static long start = System.currentTimeMillis();
public static void log(Object label) {
System.out.println(
System.currentTimeMillis() - start + "\t| " +
Thread.currentThread().getName() + "\t| " +
label);
}
}
我观察到主线程在调度程序线程开始工作之前退出,因此没有显示调度程序线程的输出。据我所知 ExecutorService 线程不是守护线程,那么为什么会有这种行为呢?
【问题讨论】:
-
请edit您的问题包含您拥有的完整源代码minimal reproducible example,其他人可以编译和测试。
-
@Progman、@sta、@Jazb,你为什么关闭这个问题?看起来我可以弄清楚要问什么以及如何重现它。这种行为是不可接受的。很明显,当有一个
ExecutorService-task 正在运行时,为什么main线程/ 进程会退出。
标签: java rx-java executorservice