В Java, как я ожидаю всех задач, но останавливаюсь на первой ошибке?

можно использовать lib altsoft xml2pdf для этого

6
задан Dan Fabulich 10 September 2009 в 01:41
поделиться

2 ответа

Да, вам нужно отслеживать, используете ли вы ExecutorCompletionService. Обычно вы вызываете get () для фьючерсов, чтобы узнать, произошла ли ошибка. Не повторяя задачи, как еще можно сказать, что одно не удалось?

2
ответ дан 17 December 2019 в 18:18
поделиться

Если ваша серия задач имеет известный размер, вам следует использовать второй пример в javadoc.

Однако, если вы не знаете количество задач, которые вы отправите в CompletionService, тогда вы есть своего рода проблема производитель-потребитель. Один поток создает задачи и помещает их в ECS, другой будет использовать фьючерсы на задачи через take (). Можно использовать общий семафор, позволяющий производителю вызывать release (), а потребителю - вызывать acqu (). Семантика завершения будет зависеть от вашего приложения, но изменчивое или атомарное логическое значение на производителе, чтобы указать, что это сделано, будет достаточно.

Я предлагаю Семафор вместо ожидания / уведомления с помощью poll (), потому что существует недетерминированная задержка между время создания задачи и время, когда будущее этой задачи доступно для потребления. Следовательно, потребитель и производитель должны быть немного умнее.

1
ответ дан 17 December 2019 в 18:18
поделиться