Насколько я знаю, и связанный список, и массив могут расти без ограничений, или я ошибаюсь? Но когда я прошел через документация в Executor Service Я вижу это:
Неограниченные очереди. Использование неограниченной очереди (например, LinkedBlockingQueue без предопределенной емкости) приведет к тому, что новые задачи будут ожидать в очереди, когда все потоки corePoolSize будут заняты. Таким образом, никогда не будет создано больше потоков corePoolSize. (Поэтому значение maxPoolSize не имеет никакого эффекта.)
Изменяется ли свойство Unbounded Queue
, когда LinkedBlockingQueue
имеет определенную емкость?
А это написано для ArrayBlockingQueue
:
Ограниченные очереди. Ограниченная очередь (например, ArrayBlockingQueue) помогает предотвратить исчерпание ресурсов при использовании с конечными максимальными размерами пула, но ее сложнее настраивать и контролировать. Размеры очередей и максимальные размеры пулов могут компенсироваться друг другом: использование больших очередей и малых пулов минимизирует использование ЦП, ресурсов ОС и накладных расходов на переключение контекста, но может привести к искусственно заниженной пропускной способности. Если задачи часто блокируются (например, если они связаны с вводом-выводом), система может запланировать время для большего количества потоков, чем вы разрешаете в противном случае. Использование небольших очередей обычно требует больших размеров пула, что увеличивает нагрузку на ЦП, но может привести к неприемлемым издержкам планирования, что также снижает пропускную способность.