Как сделать Multi-Processing (тяжеловесные процессы) с использованием Java

У меня есть 2 модуля, один написан на Java (Web), другой на C ++. Оба являются независимыми модулями и развернуты в Linux. Я должен выполнить C ++ (.exe файлы), используя Java. Для этого я использую exec-библиотеки ProcessBuilder и Apache-Commons, и моя следующая задача — заставить все эти исполнения (C ++) работать параллельно.
Поскольку все эти процессы имеют большой вес, я думаю, что я не мог использовать потоки здесь. Пожалуйста, кто-нибудь может подсказать мне, как сделать эти процессы параллельными и получить обратную связь для каждого процесса. Еще одно сомнение: «Действительно ли это возможно с Java?», Если нет каких-либо предложений, чтобы добиться этого?

-1

Решение

В java создайте поток и запустите exe-файл C ++ из этого потока, чтобы ваше java-приложение не ожидало правильной работы приложения C ++. С помощью потока вы можете запустить приложение C ++, и ваше приложение Java также продолжит загрузку в JVM. Так что поставь свой ProcessBuilder коды в этой теме, как показано ниже.

Если вам нужна связь между двумя приложениями, вы должны реализовать два потока, по одному в каждом приложении. Оба эти потока будут общаться через канал. Следовательно, вы должны реализовать и трубу.

У меня есть подобный вид реализации, как показано ниже, и его работы найти для меня: —

 class CppRunParallel{

public CppRunPalallel(){

try {
Thread t = new Thread(new RunCppInParallel());
t.start();
}
catch (Exception e) {
logger.fatal("GlobusMonitor encountered exception. reason : " + e);
}
}

private class RunCppInParallel implements Runnable{

public RunCppInParallel(){

String[] command ={"\path\to\your.exe", "param"};
ProcessBuilder pb = new ProcessBuilder(command);

pb.redirectOutput(new File("\tmp\out.txt"));
//Here in above file you will get the feed back from C++ application
String result;
String overall="";
try {
Process p = pb.start();
p.waitFor();
BufferedReader br = new BufferedReader(
new InputStreamReader(p.getInputStream()));
while ((result = br.readLine()) != null){
overall = overall + "\n" + result;
}
//p.destroy();
System.out.println(result);

} catch (Exception e) {
e.printStackTrace();
}

}
}
}

Надеюсь, что это поможет вам.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]