5

如果我们有以下代码:

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 或默认关闭所有关联的流?

4

3 回答 3

10

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

于 2013-09-24T19:58:42.450 回答
2

由于您必须消耗整个InputStream过程以防止阻塞,因此一旦您这样做了,无论您是否明确关闭阅读器都没有太大区别。进程死后,输入流关闭,包装阅读器变成垃圾。它们不占用任何其他系统资源,因此是无害的。

设置一个引用Process实例的变量没有任何意义。

于 2013-09-24T20:02:16.273 回答
0

设置 null 不是强制性的,但您应该p.destroy()在 finally 中调用方法。

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

你可以在这里阅读更多

干杯!!

于 2013-09-24T20:04:19.507 回答