问题标签 [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 - Gridgain 执行器服务
使用 GridGain 的 GridExecutorService 远程执行作业与使用 @Gridify 注释相比有什么优势?
您可以将 java.lang.concurrent.ExecutorService 的实例传递给您的类,并且不依赖于网格框架,但是您会失去任何功能吗?
java - Java 执行器:等待任务终止。
我需要提交一些任务,然后等待它们,直到所有结果都可用。他们每个人都将 a 添加String
到 a Vector
(默认情况下是同步的)。然后我需要为 Vector 中的每个结果启动一个新任务,但只有在所有以前的任务都停止工作时我才需要这样做。
我想使用 Java Executor,特别是我尝试使用Executors.newFixedThreadPool(100)
以使用固定数量的线程(我有可变数量的任务,可以是 10 或 500),但我是执行器的新手,我不知道如何等待任务终止。这就像我的程序需要做的伪代码:
我不能做一个 e.shutdown 因为我有一段时间(真的),我需要重用executorService
......
你能帮助我吗?你能给我推荐一本关于 java executors 的指南/书吗?
java - Java Executors:如何停止提交的任务?
我已经使用 executors 提交了一个任务,我需要它在一段时间后停止(例如 5 分钟)。我试过这样做:
但我总是得到一个错误:我有一个需要由任务修改然后由线程读取的共享向量,即使我停止所有任务,如果发生超时,我会得到:
有什么不对?如何停止提交的 5 分钟后仍在工作的任务?
java - 知道所有线程何时完成并处理异常
我正在使用 Executor 框架使用线程池(即 newFixedThreadPool)启动多个线程。我使用 threadpool.submit(aThread) 提交要由线程池执行的作业,这工作正常,但是我需要确定所有线程何时完成,以便我可以继续其他处理。我查看了使用 Future.get() 阻塞直到线程完成这里的问题是它阻塞直到结果可用。我还研究了使用连续调用 isTerminated() 方法,然后在发出关闭后休眠以检查所有线程是否已完成,但这对我来说似乎并不整洁。还有另一种更清洁的方法吗?此外,如果任何一个线程中出现异常,我希望能够终止所有其他正在运行的线程,并阻止池中任何排队的线程启动。执行此操作的最佳机制是什么?
期待听到您的回复
TIA
java - 具有可变延迟的 ScheduledExecutorService
假设我有一个任务是从 java.util.concurrent.BlockingQueue 中提取元素并处理它们。
如果可以动态更改频率,我如何安排/重新安排任务?
- 这个想法是获取数据更新流并将它们批量传播到 GUI
- 用户应该能够改变更新频率
java - ExecutorService 惊人的性能盈亏平衡点——经验法则?
我试图弄清楚如何正确使用 Java 的 Executors。我意识到向 an 提交任务ExecutorService
有其自身的开销。但是,我很惊讶地看到它如此之高。
我的程序需要以尽可能低的延迟处理大量数据(股市数据)。大多数计算都是相当简单的算术运算。
我试图测试一些非常简单的东西:“ Math.random() * Math.random()
”
最简单的测试在一个简单的循环中运行此计算。第二个测试在匿名 Runnable 中执行相同的计算(这应该衡量创建新对象的成本)。第三个测试通过了Runnable
(ExecutorService
这衡量了引入执行者的成本)。
我在我的小笔记本电脑(2 cpus,1.5 gig ram)上运行了测试:
(大约有四次运行,前两个数字最终相等)
请注意,执行程序比在单个线程上执行花费的时间要多得多。对于 1 到 8 之间的线程池大小,这些数字大致相同。
问题:我是否遗漏了一些明显的东西或者这些结果是预期的?这些结果告诉我,我传递给执行程序的任何任务都必须进行一些重要的计算。如果我正在处理数百万条消息,并且我需要对每条消息执行非常简单(且成本低廉)的转换,我仍然可能无法使用执行器......尝试将计算分布在多个 CPU 上可能最终会比仅仅花费更多在一个线程中执行它们。设计决策变得比我最初想象的要复杂得多。有什么想法吗?
java - 删除 ThreadPoolExecutor 的所有排队任务
我对ThreadPoolExecutor有一个相当简单的问题。我有以下情况:我必须使用队列中的对象,为它们创建适当的工作任务并将它们提交给 ThreadPoolExecutor。这很简单。但是在关闭场景中,许多工作人员可能会排队等待执行。由于其中一个任务可能运行了一个小时,并且我想要相对快速地正常关闭应用程序,因此我想丢弃 ThreadPoolExecutor 中的所有排队任务,而已经处理的任务应该正常完成。
ThreadPoolExecutor 文档有一个remove()方法,但只允许删除特定任务。purge()仅适用于已取消的 Future 任务。我的想法是清除包含所有排队任务的队列。ThreadPoolExecutor 提供对此内部队列的访问,但文档指出:
方法 getQueue() 允许访问工作队列以进行监视和调试。强烈建议不要将此方法用于任何其他目的。
所以抓住这个队列并清除它不是一种选择。此外,这个文档片段说:
当大量排队的任务被取消时,两个提供的方法 remove(java.lang.Runnable) 和 purge() 可用于协助存储回收。
如何?当然,我可以维护我提交给执行程序的所有任务的列表,并且在关闭的情况下,我遍历所有条目并使用 remove() 方法将它们从 ThreadPoolExecutor 中删除......但是......来吧,这是一个浪费内存并且维护这个列表很麻烦。(例如删除已经执行的任务)
我感谢任何提示或解决方案!
java - ExecutorService(特别是 ThreadPoolExecutor)线程安全吗?
ExecutorService
保证线程安全吗?
我将把来自不同线程的作业提交到同一个 ThreadPoolExecutor,我是否必须在交互/提交任务之前同步对执行器的访问?
java - 无法创建具有大小限制的缓存线程池?
似乎不可能创建一个对可以创建的线程数有限制的缓存线程池。
下面是静态Executors.newCachedThreadPool
在标准 Java 库中的实现方式:
因此,使用该模板继续创建一个固定大小的缓存线程池:
现在,如果您使用它并提交 3 个任务,一切都会好起来的。提交任何进一步的任务将导致拒绝执行异常。
试试这个:
将导致所有线程顺序执行。即,线程池永远不会产生多个线程来处理您的任务。
这是 ? 的执行方法中的错误ThreadPoolExecutor
?或者,也许这是故意的?还是有其他方法?
编辑:我想要与缓存线程池完全一样的东西(它按需创建线程,然后在超时后将它们杀死),但它可以创建的线程数有限制,并且一旦它有继续排队其他任务的能力达到其线程限制。根据 sjlee 的回应,这是不可能的。看它的execute()
方法ThreadPoolExecutor
确实是不可能的。我需要像确实那样子类化ThreadPoolExecutor
和覆盖,但它所做的是一个完整的hack。execute()
SwingWorker
SwingWorker
execute()
executorservice - 多线程应用程序中执行器相对于线程的优势是什么
我已经看到了一些关于 Executors 比 Threads 更好的评论,但是如果你有许多线程通过有界缓冲区进行通信(如在基于流的编程中),为什么在你必须使用线程时仍然使用 Executors(使用 newCachedThreadPool (?))。另外,我使用 isAlive()、interrupt() 之类的方法——如何获取线程句柄?
有人有我可以抄袭的示例代码吗?;-)