使用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()之后,没有日志,没有错误,没有异常,没有,它只是为所有线程终止。
有没有解决方案?
答案 0 :(得分:0)
有点晚了但也许这会帮助其他人。 你正在开始3个线程,但你没有关闭任何你想要的东西:
t1.join();
等 我怀疑你收到了ConcurrentModificationException错误。