Прервать countDownLatch.await() после истечения времени ожидания

Я использую ExecutorService реализовать пул из 3 потоков и CountDownLatch для контроля завершения всех потоков для дальнейшей обработки.

ExecutorService threadExecutor = Executors.newFixedThreadPool(3);
CountDownLatch countDownLatch = new CountDownLatch(3);

AuthorisationHistoryTask task1 =
    new AuthorisationHistoryTask(commonDataThread, countDownLatch );
PreAuthHistoryTask task2 = 
    new PreAuthHistoryTask(userID,sessionID, commonDataThread, countDownLatch );

SettlementHistTask task4 = new SettlementHistTask(commonDataThread,countDownLatch);

Future<Map<String, Object>> futureAuthHistory = threadExecutor.submit (task1);
Future<Map<String, Object>> futurePreAuthHist = threadExecutor.submit (task2);
Future<Map<String, Object>> futureSettleHist = threadExecutor.submit(task4);

threadExecutor.shutdown();

try {
     countDownLatch.await();
}catch (InterruptedException e) { 
     logger.logCommon("InterruptedException",CLASS_NAME);                     
}catch (ExecutionException ex) { 
     logger.logCommon("InterruptedException",CLASS_NAME); 
}

я использовал countDownLatch.await() ждать, пока все темы не будут завершены. Я хочу этот процесс countDownLatch.await() прервать в случае ВЫХОДА, скажем, 45 секунд. Как я могу это реализовать?

1 ответ

Решение

Используйте перегруженный вариант await который принимает тайм-аут.

countDownLatch.await(45, TimeUnit.SECONDS);
Другие вопросы по тегам