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 -1
und 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;
}