У меня есть ThreadPoolExecutor, созданный с неограниченной очередью (LinkedBlockingQueue) и размером ядра и максимального пула, равным числу процессоров (скажем, 4).
Каждый великий, пока я получаю исключение RejectedExecutionException.Исполнитель находится в рабочем состоянии.Насколько я понимаю, это не должно происходить с неограниченной очередью.
Я не смог отловить это в отладчике, чтобы точно увидеть, что происходит, но из трассировки стека это выглядит как в ThreadPoolExecutor.execute,workQueue.offer возвращает false, поэтому он переходит к биту, где он пытается раскрутить новый поток.Но poolSize уже на максимуме, поэтому он генерирует исключенное исключение при выполнении.
Я не совсем понимаю это.
Но независимо от того, должен ли я сделать максимальный размер пула немного больше размера основного пула?