У меня возникли некоторые вопросы относительно использования Future
. Пожалуйста, перейдите к примеру ниже, прежде чем обращаться к моим запросам.Запросы о Java Future and RejectionHandler
http://javarevisited.blogspot.in/2015/01/how-to-use-future-and-futuretask-in-Java.html
- Основная цель использования пулов потоков &
Executors
это выполнить задачу асинхронно, не блокируя основной поток. Но как только вы используетеFuture
, он блокирует вызывающий поток. Нужно ли создавать отдельный пул потоков/потоков для анализа результатов задачCallable
? ИЛИ есть ли другое хорошее решение? - С
Future
вызов блокирует вызывающего абонента, стоит ли использовать эту функцию? Если я хочу проанализировать результат задачи, я могу иметь синхронный вызов и проверять результат вызова безFuture
. - Каков наилучший способ справиться с отклоненными задачами с использованием
RejectionHandler
? Если задача отвергается, следует ли перевести задачу на другой поток или ThreadPool или отправить эту же задачу в текущуюThreadPoolExecutor
?
Пожалуйста, исправьте меня, если мой мыслительный процесс не соответствует этой функции.
Фьючерсы do * not * блокируют вызывающую нить. Угадайте, почему существует * цикл * в примере кода, который вы связали? Потому что 'isDone' делает * not * wait. Несмотря на то, что в примере цикла опрос 'isDone' в цикле все еще плохой стиль кодирования. Если вы хотите подождать, вы можете использовать 'get', и если вы не хотите, чтобы поток вызывающего абонента был заблокирован, вы можете [указать тайм-аут] (http://docs.oracle.com/javase/8/docs/ api/java/util/concurrent/Future.html # get-long-java.util.concurrent.TimeUnit-) – Holger
Посмотрите на [документацию «RejectedExecutionHandler», «Все известные классы реализации»] (http: // docs. oracle.com/javase/8/docs/api/java/util/concurrent/RejectedExecutionHandler.html) для предложений по использованию стратегий. – Holger
Есть ли какой-либо API из будущего, чтобы получать уведомление, когда результат доступен, поскольку тайм-аут полностью не служит цели? Если это не доступно, лучше ли использовать Future и выполнять задачу синхронно в самой теме звонящего? –