Я попытался создать и выполнить ThreadPoolExecutor с помощью
int poolSize = 2;
int maxPoolSize = 3;
ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(2);
Если я пытаюсь выполнить 7-ю, 8-ю... задачу непрерывно
threadPool.execute(task);
после того, как очередь достигла максимального размера
, он начинает метать "RejectedExecutionException". Значит, я потерял добавление этих задач.
В этом случае, какова роль BlockingQueue, если у нее отсутствуют задачи? Значит, почему он не ждет?
Из определения BlockingQueue
Очередь, которая дополнительно поддерживает операции, ожидающие очереди стать непустым при извлечении элемента и дождаться места становятся доступными в очереди при хранении элемента.
Почему мы не можем найти связанный список (обычная реализация очереди вместо блокировки очереди)?