在上一个子流程完成后,重用相同的变量来创建另一个子流程是否安全?
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?
最佳答案
如果先前的子流程完成后,我使用相同的变量创建另一个子流程是否安全?
是。如果子流程没有完成,那也是安全的,因为您要用新值(新的对象引用)完全替换p
中存储的值。
实际上,您在显示的循环中的赋值根本不会覆盖先前的值。到新的迭代开始时,由于您已在块内声明了变量,因此它要么是每次迭代中的新变量,要么被视为已被视为新变量(您可以以任何一种方式查看它;字节码可能反映了后者,但我认为理论反映了前者)。您的分配是给(新)变量一个初始值,而不是覆盖先前迭代的值。如果将Process p
声明移到循环外,则将其覆盖。仍然可以。 :-)
该语言概念不一定转换为字节码(这更实用),但是作为语言概念确实是这样。例如,您可以在final
上添加p
修饰符,这很好。下次不一样的p
。
关于java - Java:子流程完成后使用相同的子流程变量是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24968950/