当前位置: 首页 > 面试题库 >

超时后中止countDownLatch.await()

茹元魁
2023-03-14
问题内容

我正在使用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秒)的情况下中止。我该如何实施?


问题答案:

使用的重载变体await接受超时。

countDownLatch.await(45, TimeUnit.SECONDS);


 类似资料:
  • 我的java代码中有一个异步链,我想在某个超时后停止它,所以我创建了一个包含一些线程的线程池,并像这样调用CompletableFuture 然后我有一个循环方法,从数据库加载数据并对其执行一些任务,一旦所有CompletableFutures都完成了,它就会再次执行 我的问题是task6,它有一个非常密集的任务(它是一个网络连接任务,有时会永远挂起)。我注意到我的orTimeout在30秒后被正

  • 问题内容: 我正在尝试以这种方式使用python的多处理程序包: 从池的进程中,我要避免等待等待60多个返回结果的进程。那可能吗? 问题答案: 这是一种无需更改功能即可执行此操作的方法。需要两个步骤: 使用您可以传递的选项来确保每次执行任务后重新启动池中的工作进程。 将现有的辅助函数包装在另一个函数中,该函数将调用守护程序线程,然后等待该线程的结果数秒钟。使用守护程序线程很重要,因为进程在退出之前

  • 问题内容: 我正在使用SqlBulkCopy从xml备份还原表。其中一个表备份约为200MB,并且有很多记录。 我有错误: 问题答案: 您可能需要增加超时时间。尝试从默认值30秒增加该值。

  • 我需要实现一个预定的执行器服务,它每隔x秒运行一个线程。线程执行应该中断,以防它需要超过y秒。我曾尝试使用SchduledExecutorService实现该解决方案,该解决方案具有可配置的间隔参数,但没有超时参数。我有一些想法,我想听听你对实现/技术的建议。

  • 我有一个简单的lambda函数,它异步进行API调用,然后返回数据。99%的情况下效果很好。当API所用的时间超过lambda配置的超时时间时,它会给出一个预期的错误。现在的问题是,当我对lambda函数进行任何后续调用时,它会永久性地给我超时错误。 为了测试这种情况,我将lambda超时设置为3秒,并有办法在lambda中触发这两个函数。 Javascript 当我调用函数时,没有问题。当我调用

  • 问题内容: 我正在寻找可以提供超时的ExecutorService实现。如果提交到ExecutorService的任务花费的时间超过了超时时间,则这些任务将被中断。实现这样的野兽并不是一个困难的任务,但是我想知道是否有人知道现有的实现。 这是我根据以下一些讨论得出的。任何意见? 问题答案: 你可以为此使用ScheduledExecutorService。首先,你只提交一次即可立即开始,并保留创建的