私はこのコードでスレッドを持っています:
public void run() {
try {
fileProcessor = new FileProcessor();
fileProcessor.process();
} catch (RuntimeException e) {
// ...
} finally {
if (fileProcessor != null) {
fileProcessor.close();
}
}
}
メソッドfileProcessor.process();
もいくつかの新しいスレッドを実行します:
protected void process() {
this.writer = new Writer();
final MyClient client = new MyClient();
client.start();
}
このコードは時々例外をスローしました
Caused by: java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:26)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:99)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:116)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:203)
at java.io.Writer.write(Writer.java:140)
at java.io.Writer.append(Writer.java:210)
ストリームを安全に閉じるにはどうすればよいですか? おそらく私はfileProcessor.close();
このストリームを閉じますが、それを使用するスレッドがまだいくつかあるからです。