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

跟踪ExecutorService中已完成的任务

东方河
2023-03-14

我正在用Java编写一个应用程序,它使用ExecutorService来运行多个线程。

我希望将多个任务(一次数千个)作为调用项提交给执行器,完成后,检索它们的结果。我处理这个问题的方式是,每次调用submit()函数时,都会得到一个Future(未来),并将其存储在ArrayList中。稍后,我将列表传递给一个线程,该线程不断对其进行迭代,调用future.get()函数并给出一个超时时间,以查看任务是否完成。这是正确的做法,还是效率太低?

编辑----更多信息----另一个问题是每一个可调用的处理时间不同。因此,如果我只是从列表中取出第一个元素并对其调用get(),它将阻塞,而其他元素的结果可能变得可用,而程序将不知道。这就是为什么我需要不断迭代超时。

提前致谢

共有1个答案

纪勇军
2023-03-14

请注意,对Future.Get的调用将阻塞,直到答案可用。因此您不需要另一个线程来迭代数组列表。

请参阅此处https://blogs.oracle.com/corejavatechtips/entry/get_netbeans_6

 类似资料:
  • 问题内容: 我有ConcurrentLinkedDeque,它用于同步push / pop元素,还有一些异步任务,这些任务正在从堆栈中获取一个元素,如果该元素具有邻居,则会将其推入堆栈。 示例代码: 我想在while循环中有另外一条语句来回答问题-“执行程序中的任何任务都在工作?” 问题答案: 如果使用,没有一种干净的方法来检查所有Runnable是否都已完成。除非您在Runnable本身中构建了

  • 我已经使用spring-cloud-stream和RabbitMQ-binders和spring-cloud-sleuth建立了一个演示项目。 我有一个预定的春-云-流源: 我是不是漏掉了什么?(对zipkin来说相当陌生,勇敢而侦探)

  • 我正在ThreadPoolExecutor中运行多个任务。我将其初始化如下: 我自己实现了runnable(),其中包含一个方法来跟踪提交任务的进度。我提交的实例如下: 我正在寻找一种查询当前/挂起线程的执行器/阻塞队列的方法。我尝试使用jobQueue。toArray()和重写executor方法但在这两种情况下,返回的Runnable都是FutureTask类型,不包含太多数据。有没有一种方法

  • 描述演示如何从服务网格收集遥测信息的任务。 分布式跟踪。如何配置代理,以便向Zipkin或Jaeger发送跟踪请求 收集metrics和日志。这个任务展示如何配置Istio来收集metrics和日志。 收集TCP服务的Metrics。这个任务展示如何为TCP服务收集metrics和日志。 从Prometheus中查询Metrics。这个任务展示如何使用Prometheus查询metrics。 使用

  • 跟踪行为控制着 Entity Framework Core 是否会在其变更跟踪器里维持实体实例的信息。如果实体是被跟踪的,任何检测到的该实体的变更都将在 SaveChanges() 时持久化到数据库中。Entity Framework Core 还会对已跟踪的、之前已加载到 DbContext 实例中的查询和实体进行相互的导航属性装配。 提示 你可以在 GitHub 上查阅当前文章涉及的代码样例。

  • 在Java中,Executor类不像ExecutorService子类那样具有shutdown/shutdownNow()/awaitTermination。因此,如果通过调用executorObject启动任务/线程。execute(runnableTask),如何检查任务是否完成?