我们是否需要在finally块中将进程变量设置为null?

时间:2013-09-24 19:57:03

标签: java process

如果我们有以下代码:

Process p = null;
BufferedReader br = null;

try{
    p = Runtime.getRuntime().exec("ps -ef");
    br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    //Do something with br
} catch (Exception e) {
    //Handle catch block
} finally {
    //Do we need to set p = null;
}

在finally块中是否需要p = null,或者默认情况下是否关闭所有关联的流?

3 个答案:

答案 0 :(得分:10)

无需将流程设置为null,但明确关闭BufferedReader块中的finally是个好主意。或者甚至更好,如果使用Java 7或更高版本,请考虑使用try with resources自动关闭流。

答案 1 :(得分:2)

由于您必须使用整个InputStream进程以防止阻塞,因此一旦您完成此操作,无论您是否明确关闭阅读器都没有太大区别。进程停止后,输入流关闭,包装器读取器变为垃圾。他们不参与任何其他系统资源,因此是无害的。

设置引用Process实例的变量无关紧要。

答案 2 :(得分:0)

设置null不是必需的,但最后应调用p.destroy()方法。

这会杀死子流程。此Process对象表示的子进程被强制终止。

您可以阅读更多here

干杯!!