本文介绍了超时后中止countDownLatch.await()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 ExecutorService 来实现一个3线程池,并使用CountDownLatch监视所有线程的完成情况,以便进一步处理。

I am using an ExecutorService to implement a 3-thread pool, and CountDownLatch to monitor the completion of all threads, for further processing.

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秒后中止。我该如何实现呢?

I have used countDownLatch.await() to wait till all the threads are completed. I want this process countDownLatch.await() to abort in case of TIME OUT say 45 secs. How can I implement this?

推荐答案

使用。

countDownLatch.await(45, TimeUnit.SECONDS);

这篇关于超时后中止countDownLatch.await()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-01 16:54