所以我有一个实现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循环仍然被打中。
线程一直是我最薄弱的一点,显然我只是没有完全掌握这里发生的事情。代码工作虽然所以我想它是有效的。虽然也许它没有按照它应该的方式编码?无论如何,非常感谢帮助,谢谢。
UPDATE
感谢您的信息所有。有意义的是while(running)循环没有做任何事情。我将删除它。我在上面添加了其余的代码,以前我没有提供给更多的上下文,以防任何人有任何进一步的添加。
是否有任何答案给你你正在寻找的解决方案/解释,或者有什么你想要的? – Attila 2012-04-05 15:53:31
是的,我想他们确实回答了这个问题。好的,我会将其中一个标记为已接受的答案。 – cardician 2012-04-05 16:24:04