Почему он не предоставляет конечную очередь и политику отклонения (отклонять, когда не удается отправить новое задание)?
Вам нужно будет спросить дизайнеров, но тот факт, что онирешил не поддерживать это предполагает , что они думали, что это будет бесполезно.(Или, по крайней мере, не достаточно полезно , чтобы оправдать дополнительную сложность.)
Есть и другая причина.Реализация ScheduledThreadPoolExecutor
зависит от очереди, возвращающей элементы в правильном порядке.Если вы посмотрите на исходный код, вы увидите, что он использует собственный класс очереди для этого.Есть комментарий, который говорит это:
Использование пользовательской очереди (DelayedWorkQueue
), вариант неограниченного DelayQueue
.Отсутствие ограничений по емкости и тот факт, что corePoolSize
и maximumPoolSize
фактически идентичны, упрощает некоторые механизмы выполнения (см. delayedExecute
) по сравнению с ThreadPoolExecutor
.
Кроме того, очевидно, чтореализация очереди задержки должна иметь определенные операционные свойства, чтобы исполнитель работал правильно и эффективно.Возможно, именно поэтому они не позволяют вам предоставлять собственную реализацию очереди.
Наконец, если вы хотите, чтобы ваше приложение накладывало ограничение на размер очереди задержки, вы можете использовать yourPool.getQueue().length()
для проверки очереди.длина до планирования новой задачи.