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

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/

10-12 06:19