Я обнаружил, что IoScheduler.createWorker () немедленно создаст NewThreadWorker, если нет кэшированного NewThreadWorker , Это может привести к OutOfMemoryError.
Если я добавлю 1000 единиц работы в IoScheduler единовременно ,, это создаст 1000 единиц NewThreadWorker и ScheduledExecutorService.
private void submitWorkers(int workerCount) {
for (int i = 0; i < workerCount; i++) {
Single.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(1000);
return "String-call(): " + Thread.currentThread().hashCode();
}
})
.subscribeOn(Schedulers.io())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
// TODO
}
});
}
}
Если я установил workerCount с 1000, я получил OutOfMemoryError , Я хочу знать, почему IoScheduler использует NewThreadWorker с ScheduledExecutorService, но просто выполняет одну работу。
Каждый раз, когда приходит новая работа, она создает NewThreadWorker и ScheduledExecutorService, если нет кэшированного NewThreadWorker , Почему он предназначен для такого процесса?