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を明示的に閉じることをお勧めします。または、Java 7 以降を使用している場合は、リソースを使用してストリームを自動的に閉じることを検討してください。BufferedReaderfinallytry

于 2013-09-24T19:58:42.450 に答える
2

ブロッキングを防ぐためにプロセス全体InputStreamを消費する必要があるため、一度それを行うと、リーダーを明示的に閉じるかどうかに大きな違いはありません。プロセスが停止すると、入力ストリームが閉じ、ラッパー リーダーがガベージになります。これらは他のシステム リソースを使用しないため、無害です。

インスタンスを参照する変数を設定しても意味Processがありません。

于 2013-09-24T20:02:16.273 に答える