如何使用Java进行多处理(重量级进程)



我有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();
    }
    }
  }
}

希望这对您有所帮助。

相关内容

  • 没有找到相关文章

最新更新