gpt4 book ai didi

java - 可以对线程的这方面进行一些解释

转载 作者:行者123 更新时间:2023-12-02 00:26:03 24 4
gpt4 key购买 nike

所以我有一个实现 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) 循环不执行任何操作,这是有道理的。我会删除它。我在上面添加了之前未提供的其余代码,以便提供更多上下文,以防有人需要进一步添加任何内容。

最佳答案

当填充br的人关闭它时,第一个循环就会停止。

p.waitFor() 确实会等待 p 完成。该循环有点无效,因为它只执行一次,因此您最好将其删除。

Sooo ...假设 p 正在填充 br 直到完成并退出,waitFor 只需等待很短的时间,可能不会在全部。

为了更准确地理解正在发生的事情,我们需要 p 后面的代码,填充 br 的任何内容以及这些事情是如何开始的。

关于java - 可以对线程的这方面进行一些解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10030805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com