我有2个模块,一个是用Java(Web(编写的,另一个是用C++编写的。两者都是独立的模块,部署在Linux中。我必须使用 java 执行C++(.exe 个文件(。为此,我正在使用ProcessBuilder和Apache-Commons执行库,我的下一个任务是使所有这些执行(C++(并行运行。由于所有这些过程都很重,我想我不能在这里使用线程。请任何人建议我如何使这些过程并行并获得每个过程的反馈。还有一个疑问"Java真的有可能吗?",如果没有任何建议来实现这一点?
在 java 中,创建一个线程并从该线程执行C++ exe 文件,这样您的 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 ={"pathtoyour.exe", "param"};
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectOutput(new File("tmpout.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();
}
}
}
}
希望这对您有所帮助。