问题标签 [executorservice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
886 浏览

java - java.util.concurrent

我试图启动一个 Runnable 类的运行方法,但是我不断收到 NullPointerException,我使用 WebSpheres commonj.workmanager 来获取 executorService 的实例。这是我正在使用的代码。

0 投票
3 回答
1903 浏览

java - java fixedThreadPool 可以被多个线程使用吗

我有一个 Web 服务,它在返回结果之前会进行多次小计算。我想使用ExecutorService提供Executors.newFixedThreadPool()的方式来实现 Master - Worker 模式(即调用invokeAll并让线程等待所有结果完成)。理想情况下,所有 web 服务线程都使用相同的执行器服务,这样它们就不必都创建自己的线程池,它们可以共享一个用完系统所有处理时间的大池。

我对这种方法有疑问:

  • invokeAll从多个线程访问函数是否安全。
  • 执行程序服务是否会按顺序处理请求(即首先来自线程 1 的所有任务,然后是线程
  • 有没有办法说 10 个工作线程,并且可用的最大线程数取决于传入的请求数,所以假设我们有 1 个请求,它使用所有 10 个线程来处理该请求。如果您有 2 个请求,则每个请求将它们拆分为 5 个线程等。
0 投票
3 回答
4792 浏览

java - 什么会使单个任务执行者停止处理任务?

我正在使用java.util.concurrent.ExecutorService通过调用获得的Executors.newSingleThreadExecutor(). 这ExecutorService有时会停止处理任务,即使它没有被关闭并继续接受新任务而不抛出异常。OutOfMemoryError最终,它建立了足够多的队列,以至于我的应用程序异常关闭。

文档似乎表明,这个单线程执行器应该通过在必要时启动一个新的工作线程来替换一个已经死亡的工作线程来避免任务处理错误。我错过了什么吗?

0 投票
4 回答
9655 浏览

java - invokeAll() 不愿意接受一个 Collection>

我不明白为什么这段代码无法编译

错误消息是:

list是一个Collectionof DocFeeder,它实现了Callable<Boolean>- 这是怎么回事?!

0 投票
7 回答
119033 浏览

java - Java Timer vs ExecutorService?

我有代码,我使用java.util.Timer. 我环顾四周,看到ExecutorService可以做同样的事情。所以这里的这个问题,你有没有使用TimerExecutorService安排任务,一个使用比另一个有什么好处?

还想检查是否有人使用过该Timer课程并遇到ExecutorService为他们解决的任何问题。

0 投票
5 回答
4323 浏览

java - 搜索通用异步 Java 作业执行框架/库

我正在寻找可以处理Callables 或Runnables 的通用异步 Java 作业执行框架。它类似于java.util.concurrent.ExecutorService, (也可能是 wrap ExecutorService),但它还具有以下特性:

  1. 将作业持久化到数据库的能力,以防应用程序在为作业提供服务时出现故障,并且能够重新启动未完成的作业。(我知道我的工作可能必须执行Serializable,这是可以的。)

  2. 使用 UUID 使客户端能够获取作业令牌并查询作业状态。(在后台,这些信息也将保存到数据库中。)

我已经开始自己通过构建来解决这个问题ExecutorService,但我更喜欢开箱即用的开源解决方案,如果存在的话。

可以在 Spring 框架中工作的东西将是理想的。

0 投票
3 回答
4411 浏览

java - 将代码从使用计时器移植到调度的执行器服务

我正在尝试将代码从使用 java计时器移植到使用scheduleexecutorservice

我有以下用例

我是否应该将 A 类和 B 类中的 Timer 实例替换为 ScheduledExecutorService 并将 ATimerTask 和 BTimerTask 类设为 Runnable 类,例如

它是否正确。

编辑:移植的主要动机之一是因为 TimerTask 中引发的运行时异常会杀死一个线程并且无法进一步安排它。我想避免这种情况,这样即使我有运行时异常,线程也应该继续执行而不是停止。

0 投票
8 回答
118788 浏览

java - Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool()

newCachedThreadPool()相对newFixedThreadPool()

我什么时候应该使用其中一种?在资源利用方面哪种策略更好?

0 投票
4 回答
5170 浏览

java - Java 5:java.util.concurrent.FutureTask - cancel() 和 done() 的语义

我目前正在使用 FutureTasks 和 Executors 在多线程环境中寻找一个讨厌的错误。基本思想是让固定数量的线程执行单独的 FutureTasks,计算结果将显示在一张表中(不要介意这里的 GUI 方面)。

看了这么久,开始怀疑自己的智商了。

考虑这段代码:

done()由处理 MyTask 实例的 Executor 调用时,我检查我是否到达那里,因为任务已被取消。如果是这样,我会跳过所有剩余的活动,尤其是我不调用sendMessage().

FutureTask.done() 的文档说:

当此任务转换到状态 isDone 时调用受保护的方法(无论是正常还是通过取消)。默认实现什么也不做。子类可以覆盖此方法以调用完成回调或执行簿记。请注意,您可以在此方法的执行中查询状态以确定此任务是否已被取消。(API 参考

但是我没有从文档中得到的是执行FutureTask的语义。如果我一开始就通过了检查,但之后其他线程调用了我的方法怎么办?这会导致我的任务改变主意并从那时起回复吗? done()isCancelled()cancel()isCancelled() == true

如果是这样,我以后怎么知道消息是否已发送?看着isDone()只会告诉我任务的执行已经完成,但当时isCancelled()也是如此,我不知道它是否能及时发送消息。

也许这很明显,但我现在还没有真正看到。

0 投票
27 回答
384903 浏览

java - 如何使用 ExecutorService 等待所有线程完成?

我需要一次执行一些任务 4,如下所示:

全部完成后如何获得通知?现在我想不出比设置一些全局任务计数器并在每个任务结束时减少它更好的方法,然后在无限循环中监视这个计数器变为 0;或获取 Futures 列表并在无限循环中为所有这些监视器 isDone。什么是不涉及无限循环的更好的解决方案?

谢谢。