我使用ExecutorService来实现一个三线程池,并使用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秒。我如何实现这一点?
发布于 2013-03-06 19:13:54
使用接受超时的await的重载变体。
countDownLatch.await(45, TimeUnit.SECONDS);https://stackoverflow.com/questions/15245629
复制相似问题