所以我有一个实现 Runnable 的 Java 类。在 run 方法中,我得到了以下代码,但我不完全理解为什么它会以看起来的方式工作,并希望有人可以向我解释。
代码是:
public void run() {
Process p = null;
ProcessBuilder builder = new ProcessBuilder();
builder.redirectErrorStream(true);
p = builder.command("/opt/program/testscript.sh").start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
try {
while ((line = br.readLine()) != null) {
log.info(line);
}
boolean running = true;
while(running) {
p.waitFor();
running = false;
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
p.destroy();
}
}
因此,最重要的部分是从正在运行的进程中获取输出并显示它。中间部分似乎是代码等待线程处理的地方。据我了解,代码应该停止并在p.waitFor()
命令的while循环中等待,直到线程完成,然后整个事情应该结束。但是,在线程运行时会继续显示输出,因此很明显顶部的 while 循环仍在被命中。
线程一直是我的弱点,显然我只是没有完全掌握这里发生的事情。该代码虽然有效,但我想它是有效的。虽然也许它没有按应有的方式编码?无论如何,非常感谢您的帮助,谢谢。
更新
谢谢大家的信息。while(running) 循环没有做任何事情是有道理的。我会删除它。我在上面添加了我之前没有提供的其余代码,以提供更多上下文,以防有人需要进一步添加。