3 つの質問があります。
BufferedReader
説明するために、私は誰かのコードを見直していて、時々 s が閉じられていないことに気付きました。通常、Eclipse は、これがメモリ リークの可能性があるという警告を表示します (そして、私はそれを修正します)。ただし、 Callable 内部クラス内では、警告はありません。
class outerClass {
...
public void someMethod() {
Future<Integer> future = outputThreadPool.submit(new innerClass(this.myProcess.getInputStream(), threadName));
...
}
class innerClass implements Callable<Integer> {
private final InputStream stream;
private final String prepend;
innerClass(InputStream stream, String prepend) {
this.stream = stream;
this.prepend = prepend;
}
@Override
public Integer call() {
BufferedReader stdOut = new BufferedReader(new InputStreamReader(stream));
String output = null;
try {
while ((output = stdOut.readLine()) != null) {
log.info("[" + prepend + "] " + output);
}
} catch (IOException ignore) {
// I have no idea why we're ignoring this... :-|
}
return 0;
}
}
}
コードを書いたのは経験豊富な Java 開発者なので、最初は意図的なものだと思いましたが、急いで書いて見落としていたのかもしれません。
私の質問は次のとおりです。
Eclipse がこれを強調しないのはなぜですか (次の質問への回答によって回答される場合があります)
call() メソッド内で閉じられた場合に起こりうる最悪の事態は何ですか? (正当な理由は思いつきません...そしてしばらく探していました...しかし、BufferedReaderを閉じないのは意図的だったのかもしれません)
内部クラス内で BufferedReader が閉じられていない場合に起こりうる最悪の事態は何ですか?