【发布时间】:2020-03-24 19:08:12
【问题描述】:
假设我有一个 Process 对象队列,它将在我的计算机上执行一个程序,而不是单线程。为了提高效率,我想一次运行 4 个实例,以便充分利用我的 4 核 CPU。如何从队列中取出 4 个元素,开始处理它们,并让队列中的新进程取代已完成运行的进程?
【问题讨论】:
-
使用
Executors.newFixedThreadPool(4)并在其中提交您所有的Processes。它有自己的队列。 -
@Kayaman 从我在 Javadoc 中看到的
newFixedThreadPool(4)将返回一个ExecutorService对象。ExecutorService.submit()将实现Runnable接口的对象作为参数。进程对象不实现Runnable接口,但Thread对象实现。由于在我的情况下我看不到Thread对象执行像FFmpeg 这样的本机二进制文件的任何方法,我想我需要创建自己的对象来实现Runnable并让它使用Runtime.exec()来运行FFmpeg 并通过到ExecutorService.submit()。听起来对吗? -
是的,您可以(必须)将您的
Process包装成Runnable(或Callable,如果您需要返回结果)。比如executor.submit(() -> process.doSomething());循环。
标签: java parallel-processing process queue