Я знаю, что этот вопрос старый, но, похоже, никто не решил «тайну» Thread.interrupt()
на «современных платформах», я провел некоторое исследование.
Это проверено на Java 8 на Windows7 (64-bit) (но, возможно, это будет верно и для других платформ).
Вызов Thread.interrupt()
делает не бросает InterruptedIOException
Что происходит, когда метод InputStream.read()
возвращаетс -1
и Thread.interrupted()
-флагом установлено.
Таким образом, следующее «исправленное» чтение () может быть выброшено InterruptedIOException
:
static final int read(Socket socket, byte[] inData)
throws SocketTimeoutException, // if setSoTimeout() was set and read timed out
InterruptedIOException, // if thread interrupted
IOException // other erors
{
InputStream in = socket.getInputStream();
int readBytes = in.read( inData, 0, inData.length);
if ( Thread.interrupted() )
{
throw new InterruptedIOException( "Thread interrupted during socket read");
}
return readBytes;
}