如果我们有以下代码:
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,或者默认情况下是否关闭所有关联的流?
答案 0 :(得分:10)
无需将流程设置为null
,但明确关闭BufferedReader
块中的finally
是个好主意。或者甚至更好,如果使用Java 7或更高版本,请考虑使用try
with resources自动关闭流。
答案 1 :(得分:2)
由于您必须使用整个InputStream
进程以防止阻塞,因此一旦您完成此操作,无论您是否明确关闭阅读器都没有太大区别。进程停止后,输入流关闭,包装器读取器变为垃圾。他们不参与任何其他系统资源,因此是无害的。
设置引用Process
实例的变量无关紧要。
答案 2 :(得分:0)