手中的ProcessBuilder在Unix操作系统中的多线程

时间:2015-06-05 10:33:01

标签: java multithreading unix

使用unix OS,我试图在java多线程中使用ProcessBuilder运行.sh文件(.sh文件很常见,但每个线程的参数不同)。代码如下。

public class CLMScriptExe2 implements Runnable {
    final String scriptFileName = "/apps/orangd1/temp/CLM/CLM_PCF_Jenkins.sh";
    private String AppName;

    public CLMScriptExe2(String appName) {
          AppName = appName;
    }

    @Override 
    public void run() {
        try  {
            ProcessBuilder processBuilder = new ProcessBuilder(scriptFileName, AppName);
            Process process = processBuilder.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

            String line;
            while ((line = reader.readLine()) != null) {
                //String line;
                System.out.println(line);
            }
            try  {
                process.waitFor();
            }  catch (InterruptedException e)  {
                System.out.println(e.getMessage());
            }
        } catch (IOException e) {
          System.out.println(e.getMessage());
        }
        System.out.println("ending executeScript--Testing");
    }

    public static void main(String[] args) {
            CLMScriptExe2 c1 = new CLMScriptExe2("appOne");
            Thread t1 = new Thread(c1);
            t1.start();

            CLMScriptExe2 c2 = new CLMScriptExe2("appTwo");
            Thread t2 = new Thread(c2);
            t2.start();

            CLMScriptExe2 c3 = new CLMScriptExe2("appThree");
            Thread t3 = new Thread(c3);
            t2.start();
    }
}

Java程序在 processBuilder.start()之后终止。

编辑: 在此 processBuilder.start()之后,没有日志,没有错误,没有异常,没有,它只是为所有线程终止。

有没有解决方案?

1 个答案:

答案 0 :(得分:0)

有点晚了但也许这会帮助其他人。 你正在开始3个线程,但你没有关闭任何你想要的东西:

 t1.join();

等 我怀疑你收到了ConcurrentModificationException错误。