gpt4 book ai didi

Java:子进程完成后使用相同的子进程变量是否安全?

转载 作者:行者123 更新时间:2023-12-01 22:48:55 25 4
gpt4 key购买 nike

当前一个子流程完成时,重用相同的变量来创建另一个子流程是否安全?

String cmd = nextCmd();
while(waitForNext) {
Process p = Runtime.getRuntime().exec(cmd);
String iLine = null;
String eLine = null;
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while((iLine = in.readLine())!=null
|| (eLine = err.readLine())!=null) {
// just to clean the Streams
}
p.waitFor();
cmd = nextCmd();
}

如果循环持续一千次(例如),它是否有资格被GC?

最佳答案

Is it safe if I use the same variable to create another subprocess if previous subprocess finishes?

是的。如果子进程未完成,也是安全的,因为您将用新值(新对象引用)完全替换 p 中存储的值。

<小时/>

事实上,您所显示的循环中的分配根本不会覆盖以前的值。当新的迭代开始时,由于您已经在 block 内声明了变量,因此它要么是每次迭代中的新变量,要么被视为新变量(您可以以任何一种方式查看它,可能;字节码可能反射(reflect)了后者,但我认为理论反射(reflect)了前者)。 的赋值是为(新)变量提供一个初始值,而不是覆盖前一次迭代的值。如果您将 Process p 声明移到循环之外,那么您就会覆盖它。这仍然没问题。 :-)

该语言概念不一定翻译为字节码(这更实用),但作为一种语言概念确实如此。例如,您可以向 p 添加一个 final 修饰符,这样就可以了。下次p就不一样了。

关于Java:子进程完成后使用相同的子进程变量是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24968950/

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