Java相当于Ant的Java任务中的fork?
Ant Java任务提供了fork
参数,根据定义“如果启用则触发另一个VM中的类执行” 。 当我们处理大量数据时,设置此参数可以使我们免于耗尽Java堆空间。
我们希望能够通过Java类做同样的事情。 实现fork
提供的function的最佳方法是什么?
执行另一个java进程。 例如,通过使用ProcessBuilder类。
http://java.sun.com/javase/6/docs/api/java/lang/ProcessBuilder.html
您可以根据需要运行任意数量的工作进程。 让他们拥有一个单独的主类,从主类中完成他们的任务,并在他们的任务完成时退出。
你必须弄清楚他们的类路径,以及系统上java二进制文件的位置,但这是可行的。
我想你甚至可以通过Process.waitFor()完成通知。
如果你查看ant
源代码,当fork
为true
,它只包装一个Execute
任务,最终,被调用的代码是
Runtime.getRuntime().exec(cmd, env);
下载并查看org.apache.tools.ant.taskdefs.Java
和org.apache.tools.ant.taskdefs.Execute
的源代码将为您提供一些很好的指针,帮助您找到要在其中运行的可执行文件的位置平台独立方式等
我想你可以直接使用Ant API …… Ant可以直接在Java类中使用。 Javadoc可以二进制分发。