问题标签 [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 回答
6219 浏览

java - 阻塞直到 ExecutorService 完成

可能的重复:
ExecutorService,如何等待所有任务完成
Java ExecutorService:awaitTermination 所有递归创建的任务

有没有办法阻止当前线程直到ExecutorService完成所有任务?

0 投票
2 回答
185 浏览

java - 优雅的非线性任务调度?

我想安排一个任务一开始经常发生,然后随着时间的推移减少频率。我不希望仅仅为此添加对 Quartz 的依赖项。

使用标准 Java 库,我想出的最好的方法是一系列一次性任务,然后是频率较低的线性计划:

有没有更优雅的方法?

0 投票
3 回答
525 浏览

java - 带有 ExecutorService 的 Java 中的多线程代码无法返回,为什么?

我的代码库中其他地方有非常相似的多线程代码,它们运行良好,但我看不出这里出了什么问题。

这是一个简单的多线程过程,用于为搜索查询生成一些结果 XML。运行此方法的输出是:

从线程返回

线 System.out.println("Finished multithreading loop");" 永远不会到达。

修改线程数没有帮助。

编辑,谢谢大家的快速回复!以下是答案:

它显示“处理结果”的次数与我有结果一样多。如果 allResults.size() 为 25,则显示处理结果 1,处理结果 2 ...处理结果 24。

这是缺少的额外代码:

如果有人想知道,我可以保证循环中的任何代码都不会增加 allResults 的大小。

0 投票
3 回答
1815 浏览

java - Java ExecutorService 解决递归斐波那契数列

我需要使用线程递归地根据斐波那契数列中的某个索引找出数字,我尝试了以下代码,但程序永远不会结束。如果我遗漏了什么,请告诉我。

代码

修复它(感谢Fiver

我不是从 call 方法调用 getNumber(int) ,而是调用一个动态编程算法来计算该索引处的数字。

代码是:

0 投票
1 回答
295 浏览

java - 长时间计算导致 ExecutorService 停止分配新工作

我正在通过生成 5 个 pngout.exe 进程来优化 PNG 文件,以处理 PNG 文件的目录。由于 pngout 是单线程的,这会导致很大的加速。有些图像需要很长时间来优化,超过 30 秒,而标准是 <5 秒。问题:

  • 文件1大,2-5小,共50个文件,其余细节无关。
  • 前五个 pngout 进程正常生成并开始工作
  • 10秒内2-5退出
  • 1 需要 45 秒
  • 尽管有四个线程空闲,但在此期间没有产生新的 pngout 进程
  • 完成 1 后,将生成另外五个进程。

代码:

所有文件都已正确优化,这部分代码有效。问题在于,通过等待大图像,整个过程会大大减慢。与单线程时间相比,我只得到了 40% 的改进。

我究竟做错了什么?

编辑:修复了这个问题,使用了一些非常难看的代码。问题是,为了获得我正在生成的进程的退出值(知道它们何时完成以及它们是否成功),我正在读取它们的标准输出,因为调用 waitFor 将永远挂起。但是,显然使用 InputStreams 会使线程阻塞。

所以要获得进程的退出值,而不是使用这个:

我正在使用这个总代码:

这很糟糕,但现在系统工作正常,并且总是有 5 个进程在运行。

后期编辑:来自这里的StreamGobbler可能更合适。

0 投票
1 回答
589 浏览

java - ThreadPoolExecutor 和 join()

我在 SomeService 中使用 ThreadPoolExecutor 对数据执行一些工作。问题是 SomeServiceTest 在调度到 ThreadPoolExecutor 的工作线程完成之前完成。我希望 SomeService 线程与工作线程连接。在执行程序启动时,有什么方法可以将父线程与工作线程连接起来?

任何帮助,将不胜感激。

0 投票
2 回答
1355 浏览

java - 为什么 ExecutorService 在线程阻塞时继续执行?

我正在尝试编写多线程程序的一部分,其中固定线程池中的每个线程都尝试从队列中获取对象,如果队列为空,则线程等待。

我遇到的问题是程序使用的内存不断增加。

我不明白为什么 executor.execute 在线程应该等待将项目添加到队列时继续触发。如何修改我的代码以反映这一点?

0 投票
2 回答
3660 浏览

java - 如何在 ExecutorService.shutdown() 之后立即运行未完成的任务?

我有一个ScheduledExecutorService计划在一小时内执行的任务。如何获取未完成任务的列表,以便我可以强制它们立即运行?

我相信shutdown()会等待一个小时,它看起来好像shutdownNow()返回了一个无法运行的 Runnable 列表(),因为 Runnable 实现检查 Executor 状态并且当它注意到它已经关闭时 Runnable 拒绝运行。实际实现见ScheduledThreadPoolExecutor.ScheduledFutureTask.run()

有任何想法吗?

0 投票
2 回答
4371 浏览

java - 即使在所有线程都完成后,应用程序也会挂起几分钟

我将工作中的生产者/消费者示例从 Thread/Runnable 转换为 Executor/Callable/BlockingQueues 并使用 Poison Pill 终止模式。

如果您运行下面的程序,即使每个线程都已完成,它也会挂起几分钟。jstack 显示在一个看似与应用程序无关的队列上阻塞了许多线程。

我不知道为什么应用程序挂起。任何帮助表示赞赏。谢谢

0 投票
1 回答
501 浏览

java - Java多线程和超时

我正在尝试将我的 java 应用程序与ScheduledThreadPoolExecutor. 为此,我将任务提交到未来列表,然后尝试从未来列表中检索结果。但是,由于某种原因,当我运行 htop 时,它仍然只使用计算机上的一个内核。

此外,进程有时会挂起,我怀疑这是因为我正在使用的库,那么什么是基本上实现时间限制的好方法,之后线程使用新对象重新启动?

谢谢。