Ich weiß, dass diese Frage alt ist, aber da niemand das "Geheimnis" Thread.interrupt()auf "modernen Plattformen" gelöst zu haben scheint, habe ich einige Nachforschungen angestellt.
Dies wird unter Java 8 unter Windows 7 (64-Bit) getestet (dies gilt jedoch möglicherweise auch für andere Plattformen).
Der Aufruf Thread.interrupt()ist nicht ein Wurf InterruptedIOException
Was passiert , ist , dass die InputStream.read()Methode zurückgibt , mit -1und Thread.interrupted()-Kennzeichen gesetzt ist.
Folgendes könnte also als "korrigiertes" Lesen von read () angesehen werden InterruptedIOException:
static final int read(Socket socket, byte[] inData)
throws SocketTimeoutException,
InterruptedIOException,
IOException
{
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;
}