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