问题标签 [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.
java - java.util.concurrent
我试图启动一个 Runnable 类的运行方法,但是我不断收到 NullPointerException,我使用 WebSpheres commonj.workmanager 来获取 executorService 的实例。这是我正在使用的代码。
java - java fixedThreadPool 可以被多个线程使用吗
我有一个 Web 服务,它在返回结果之前会进行多次小计算。我想使用ExecutorService
提供Executors.newFixedThreadPool()
的方式来实现 Master - Worker 模式(即调用invokeAll
并让线程等待所有结果完成)。理想情况下,所有 web 服务线程都使用相同的执行器服务,这样它们就不必都创建自己的线程池,它们可以共享一个用完系统所有处理时间的大池。
我对这种方法有疑问:
invokeAll
从多个线程访问函数是否安全。- 执行程序服务是否会按顺序处理请求(即首先来自线程 1 的所有任务,然后是线程
- 有没有办法说 10 个工作线程,并且可用的最大线程数取决于传入的请求数,所以假设我们有 1 个请求,它使用所有 10 个线程来处理该请求。如果您有 2 个请求,则每个请求将它们拆分为 5 个线程等。
java - 什么会使单个任务执行者停止处理任务?
我正在使用java.util.concurrent.ExecutorService
通过调用获得的Executors.newSingleThreadExecutor()
. 这ExecutorService
有时会停止处理任务,即使它没有被关闭并继续接受新任务而不抛出异常。OutOfMemoryError
最终,它建立了足够多的队列,以至于我的应用程序异常关闭。
文档似乎表明,这个单线程执行器应该通过在必要时启动一个新的工作线程来替换一个已经死亡的工作线程来避免任务处理错误。我错过了什么吗?
java - invokeAll() 不愿意接受一个 Collection>
我不明白为什么这段代码无法编译
错误消息是:
list
是一个Collection
of DocFeeder
,它实现了Callable<Boolean>
- 这是怎么回事?!
java - Java Timer vs ExecutorService?
我有代码,我使用java.util.Timer
. 我环顾四周,看到ExecutorService
可以做同样的事情。所以这里的这个问题,你有没有使用Timer
和ExecutorService
安排任务,一个使用比另一个有什么好处?
还想检查是否有人使用过该Timer
课程并遇到ExecutorService
为他们解决的任何问题。
java - 搜索通用异步 Java 作业执行框架/库
我正在寻找可以处理Callable
s 或Runnable
s 的通用异步 Java 作业执行框架。它类似于java.util.concurrent.ExecutorService
, (也可能是 wrap ExecutorService
),但它还具有以下特性:
将作业持久化到数据库的能力,以防应用程序在为作业提供服务时出现故障,并且能够重新启动未完成的作业。(我知道我的工作可能必须执行
Serializable
,这是可以的。)使用 UUID 使客户端能够获取作业令牌并查询作业状态。(在后台,这些信息也将保存到数据库中。)
我已经开始自己通过构建来解决这个问题ExecutorService
,但我更喜欢开箱即用的开源解决方案,如果存在的话。
可以在 Spring 框架中工作的东西将是理想的。
java - 将代码从使用计时器移植到调度的执行器服务
我正在尝试将代码从使用 java计时器移植到使用scheduleexecutorservice
我有以下用例
我是否应该将 A 类和 B 类中的 Timer 实例替换为 ScheduledExecutorService 并将 ATimerTask 和 BTimerTask 类设为 Runnable 类,例如
它是否正确。
编辑:移植的主要动机之一是因为 TimerTask 中引发的运行时异常会杀死一个线程并且无法进一步安排它。我想避免这种情况,这样即使我有运行时异常,线程也应该继续执行而不是停止。
java - Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool()
newCachedThreadPool()
相对newFixedThreadPool()
我什么时候应该使用其中一种?在资源利用方面哪种策略更好?
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()
也是如此,我不知道它是否能及时发送消息。
也许这很明显,但我现在还没有真正看到。
java - 如何使用 ExecutorService 等待所有线程完成?
我需要一次执行一些任务 4,如下所示:
全部完成后如何获得通知?现在我想不出比设置一些全局任务计数器并在每个任务结束时减少它更好的方法,然后在无限循环中监视这个计数器变为 0;或获取 Futures 列表并在无限循环中为所有这些监视器 isDone。什么是不涉及无限循环的更好的解决方案?
谢谢。