4
Я использую ExecutorService
для реализации пула с тремя потоками и CountDownLatch для контроля завершения всех потоков для дальнейшей обработки.Abort countDownLatch.await() после времени
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()
прервал в случае TIME OUT 45 секунд. Как я могу это реализовать?
Это не работает. Это удерживает потоки в течение 45 секунд, даже если процесс завершен через 2-3 секунды. – user2122524
Нет, он не ждет *** до ** указанного времени. Пока защелка подсчитывается до нуля в ваших задачах, гарантируется, что она будет ждать * меньше * времени завершения или таймаута. – Perception
Спасибо .. это сработало. – user2122524