0

Если очередь не ограничена, она когда-нибудь вызовет RejectedExecutionHandler?Когда ScheduledThreadPoolExecutor отклоняет выполнение?

Из документации:

Новые задачи, представленные в методе выполнения (java.lang.Runnable) будет отвергнут, когда Исполнитель был выключен, а также когда Исполнитель использует конечные границы для обоих максимальных потоков и рабочей очереди, и насыщен.

ответ

2

В документации, которую вы указали, написано все. Если вы укажете конечные границы или очередь остановится, вызывается RejectedExecutionHandler. Если очередь не ограничена (и я не предполагаю, что она не завершена), она никогда не вызовет RejectedExecutionHandler.

Вы можете установить обработчик, который просто обращается к очереди, если есть какие-либо вопросы. Я использую что-то вроде:

// set a handler that just calls back to the queue which will block the submitter 
threadPool.setRejectedExecutionHandler(new RejectedExecutionHandler() { 
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { 
     // this will block if the queue is full 
     executor.getQueue().put(r); 
    } 
}); 
+0

Итак, поскольку ScheduledThreadPoolExecutor использует неограниченные очереди и, предполагая, что очередь не закрыли, этот обычай обработчик никогда не будет называться? – Phillip

+0

Правильно @Phillip. – Gray

Смежные вопросы