问题标签 [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 - 阻塞直到 ExecutorService 完成
可能的重复:
ExecutorService,如何等待所有任务完成
Java ExecutorService:awaitTermination 所有递归创建的任务
有没有办法阻止当前线程直到ExecutorService
完成所有任务?
java - 优雅的非线性任务调度?
我想安排一个任务一开始经常发生,然后随着时间的推移减少频率。我不希望仅仅为此添加对 Quartz 的依赖项。
使用标准 Java 库,我想出的最好的方法是一系列一次性任务,然后是频率较低的线性计划:
有没有更优雅的方法?
java - 带有 ExecutorService 的 Java 中的多线程代码无法返回,为什么?
我的代码库中其他地方有非常相似的多线程代码,它们运行良好,但我看不出这里出了什么问题。
这是一个简单的多线程过程,用于为搜索查询生成一些结果 XML。运行此方法的输出是:
从线程返回
线 System.out.println("Finished multithreading loop");" 永远不会到达。
修改线程数没有帮助。
编辑,谢谢大家的快速回复!以下是答案:
它显示“处理结果”的次数与我有结果一样多。如果 allResults.size() 为 25,则显示处理结果 1,处理结果 2 ...处理结果 24。
这是缺少的额外代码:
如果有人想知道,我可以保证循环中的任何代码都不会增加 allResults 的大小。
java - Java ExecutorService 解决递归斐波那契数列
我需要使用线程递归地根据斐波那契数列中的某个索引找出数字,我尝试了以下代码,但程序永远不会结束。如果我遗漏了什么,请告诉我。
代码:
修复它(感谢Fiver)
我不是从 call 方法调用 getNumber(int) ,而是调用一个动态编程算法来计算该索引处的数字。
代码是:
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可能更合适。
java - ThreadPoolExecutor 和 join()
我在 SomeService 中使用 ThreadPoolExecutor 对数据执行一些工作。问题是 SomeServiceTest 在调度到 ThreadPoolExecutor 的工作线程完成之前完成。我希望 SomeService 线程与工作线程连接。在执行程序启动时,有什么方法可以将父线程与工作线程连接起来?
任何帮助,将不胜感激。
java - 为什么 ExecutorService 在线程阻塞时继续执行?
我正在尝试编写多线程程序的一部分,其中固定线程池中的每个线程都尝试从队列中获取对象,如果队列为空,则线程等待。
我遇到的问题是程序使用的内存不断增加。
我不明白为什么 executor.execute 在线程应该等待将项目添加到队列时继续触发。如何修改我的代码以反映这一点?
java - 如何在 ExecutorService.shutdown() 之后立即运行未完成的任务?
我有一个ScheduledExecutorService
计划在一小时内执行的任务。如何获取未完成任务的列表,以便我可以强制它们立即运行?
我相信shutdown()
会等待一个小时,它看起来好像shutdownNow()
返回了一个无法运行的 Runnable 列表(),因为 Runnable 实现检查 Executor 状态并且当它注意到它已经关闭时 Runnable 拒绝运行。实际实现见ScheduledThreadPoolExecutor.ScheduledFutureTask.run()
。
有任何想法吗?
java - 即使在所有线程都完成后,应用程序也会挂起几分钟
我将工作中的生产者/消费者示例从 Thread/Runnable 转换为 Executor/Callable/BlockingQueues 并使用 Poison Pill 终止模式。
如果您运行下面的程序,即使每个线程都已完成,它也会挂起几分钟。jstack 显示在一个看似与应用程序无关的队列上阻塞了许多线程。
我不知道为什么应用程序挂起。任何帮助表示赞赏。谢谢
java - Java多线程和超时
我正在尝试将我的 java 应用程序与ScheduledThreadPoolExecutor
. 为此,我将任务提交到未来列表,然后尝试从未来列表中检索结果。但是,由于某种原因,当我运行 htop 时,它仍然只使用计算机上的一个内核。
此外,进程有时会挂起,我怀疑这是因为我正在使用的库,那么什么是基本上实现时间限制的好方法,之后线程使用新对象重新启动?
谢谢。