Вопрос

Муравьиная Java-задача обеспечивает fork параметр, который, по определению "если включено, запускает выполнение класса в другой виртуальной машине".Поскольку мы имеем дело с большим объемом данных, установка этого параметра спасла нас от нехватки места в куче Java.
Мы хотим иметь возможность делать то же самое с помощью класса Java.Каков был бы наилучший способ достижения функциональности, предоставляемой fork?

Это было полезно?

Решение

Запустите другой java-процесс.Например, используя класс ProcessBuilder.

http://java.sun.com/javase/6/docs/api/java/lang/ProcessBuilder.html

Вы можете запускать столько рабочих процессов, сколько пожелаете.Сделайте так, чтобы у них был отдельный основной класс, они выполняли свои задачи из этого основного класса и завершали работу, когда их задача будет выполнена.

Вам придется выяснить их путь к классам и расположение java binary в системе, но это выполнимо.

Я думаю, вы даже можете получать уведомления о завершении через 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 доступен в их двоичном дистрибутиве.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top