超时后中止countDownLatch.await()

use*_*524 8 java multithreading executorservice executors

我使用一个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); 
}
Run Code Online (Sandbox Code Playgroud)

我曾经countDownLatch.await()等到所有线程都完成了.我希望这个过程countDownLatch.await()在TIME OUT表示45秒后中止.我该如何实现呢?

Per*_*ion 23

使用重载的变量await接受超时.

countDownLatch.await(45, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

  • 不,它没有,它等待***到指定的时间.只要在您的任务中将锁存器倒计数到零,就可以保证等待完成时间的*较小*或超时. (5认同)