当javarx2 Flowable订阅Schedulers.computing时,如果任务超过线程池大小会发生什么



当javarx2 Flowable订阅Schedulers.computation时,如果任务超过线程池大小会发生什么?

我读到调度程序,默认线程计数是可用 CPU 的数量。 但是,如果有的话,谁会处理计划外的任务呢?

如何了解其行为?

Flowable
.fromArray(accountsMap.keySet().toArray())
.flatMap(key ->
Flowable
.just(key)
.subscribeOn(Schedulers.computation())
.doOnNext(sameKey -> {
//do my stuff
})
)
.blockingSubscribe(a ->
{
logger.info("blockingSubscribe received: " + a);
}
);

答案的一个重要部分是我在哪里阅读这些信息? 因为我发现很难从 官方类说明

默认计划程序在使用Executors.newScheduledThreadPoolExecutor()调用创建工作线程时不会对计划的任务数设置限制。拥有比内核更多的工作不是问题。

但是,如果使用包装在计划程序中的自定义Executor并且它们拒绝工作,则错误将传播到全局错误处理程序。不幸的是,对于 RxJava 来说,这是一个不可恢复的情况,因为它无法向观察者发出错误的信号,因为可能违反协议(并发(。(即,一般来说,错误信号也应该被调度,这可能是不可能的,因为这也可能被拒绝,而且另一端可能仍在并发执行。

最新更新