当前位置: 首页 > 知识库问答 >
问题:

executorThreadPool在任务完成或超时过期时检查

慕凌
2023-03-14

我正在使用executorservice,每个webservice调用都会产生大约9-10个可调用任务,并提交给executorservice线程池。线程池大小为100的应用程序只有一个executorService。当我提交调用时,我有一个2 For循环。外部循环运行到指定的超时期满或完成的散列集大小==提交的任务大小;内部循环将遍历调用项,如果isDone()==true,则将这些调用项收集到“completed”hashset中。当outerloop条件失败时,我循环遍历'completed'hashset中的调用项并聚合结果。问题是,我确信有一个比使用2个循环更优雅的解决方案。

如果所有任务完成或超时到期,我可以得到通知的最佳方式是什么?任何框架,库等或设计模式

共有1个答案

慕容玉堂
2023-03-14

你基本上有两种选择,拉或推。

Pull是您已经尝试过的方法--发出所有异步任务,保留对它们的引用,并调用isDone()直到它们全部完成。

另一方面,Push将调用任务和通知任务分开。您将调用异步任务,然后该方法将立即返回。通知将由任务本身处理,它们需要在工作完成时通知。

我个人更喜欢push方法,因为它可以清理代码,并分离调用任务和处理结果的关注点。不管怎样都好。

 类似资料:
  • 现在我想让所有的期货最多等待n秒,直到全部完成。我知道我可以调用,但是如果我在循环中对我的所有期货顺序地调用它,则超时开始增加。伪代码: 块会出现超时,直到结果就绪。因此,如果第一个在超时之前完成,第二个也在超时之前完成,依此类推,则整个执行时间最多为而不是。 因此,我正在寻找一个方法,它接受的列表和一个超时,并行运行所有的结果,然后返回一个未来结果的集合。有什么想法吗?

  • 我正在开始执行器服务,我想知道当任务完成时如何调用函数。我见过这个函数http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html#isDone-- 但我不确定如何将其连接到我的代码中调用函数<code>endoftheroad() 这是我的代码

  • 我怎样才能在一定的时间后超时一个承诺?我知道Q有一个承诺超时,但我使用的是原生NodeJS承诺,它们没有.timeout函数。 是我少了一个还是它的包装方式不同? 或者,下面的实现在不占用内存方面是否很好,实际上是按照预期工作的? 同样,我可以使它以某种方式进行全局包装,以便我可以在创建的每个承诺中使用它,而不必重复setTimeout和clearTimeout代码吗? 谢谢!

  • 我已经在我的Windows7机器上安装了WebLogic12C(12.1.3)。在创建管理服务器并登录之后,我试图创建一个新的托管服务器。但是当我按下create按钮时,显示加载符号需要花费大量时间,最后给出等待完成的错误超时:Activate state:STATE_DISTRIBUTED Target Servers states:AdminServer STATE_DISTRIBUTED。早

  • 我正在Eclipse中使用Java运行selenium RC。我遇到的问题是selenium.click命令。我点击的链接加载一个新页面。有时需要5秒,有时需要2-3分钟。每次我看到页面加载时,在我的测试失败后,我立即得到消息“Timed out waiting for action to finish”。 我尝试使用Selenium.IsElementPresent检查正在加载的页面。但是,当我