スレッドに割り込んだときのjava.io.InterruptedIOException

スレッドに割り込んだ状態でIOを行うとSolarisJVMではInterruptedIOExceptionが発生する。

log4j:ERROR Failed to flush writer,
java.io.InterruptedIOException
        at java.io.FileOutputStream.writeBytes(Native Method)
        at java.io.FileOutputStream.write(FileOutputStream.java:260)
        at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
        at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
        at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276)
        at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)
        at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)
        at org.apache.log4j.helpers.QuietWriter.flush(QuietWriter.java:58)
…

Solaris固有の話らしく、この出力を抑制するためには

 -XX:-UseVMInterruptibleIO

をVMのオプションに加えると良いらしい(抑制してしまっていいのかしら)。ただし、JDK7では抑制された状態がデフォルトになるらしい。

参考
JavaSE6リリースノート#Solaris使用時の注意
(spec) InterruptedIOException should not be required by platform specification (sol)