当javarx2 Flowable订阅Schedulers.computation时,如果任务超过线程池大小会发生什么?
我读到Scheduler,默认线程数是可用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);
}
);
答案的重要部分是我在哪里可以阅读此信息? 因为我发现很难达到 official class description
答案 0 :(得分:0)
默认调度程序不限制调度的任务数量,因为它们使用Executors.newScheduledThreadPoolExecutor()
调用来创建工作程序。工作多于核心不是问题。
但是,如果您使用包装在调度程序中的自定义Executor
并且它们拒绝工作,则该错误将传播到全局错误处理程序。不幸的是,对于RxJava来说,这是无法恢复的情况,因为它可能由于违反协议(并发)而无法向观察者发出错误信号。 (即,通常也应该安排错误信号,这可能是不可能的,因为也可以拒绝该错误信号,并且另一端可能仍在同时执行。)