I think any kind of IO blocking is highly depending on the operating system API and JVM. As far as I know, most subclass of InputStream ignore interrupts except PipedInputStream throw an InterruptedIOException. The thread doesn’t even respond when you stop it!!!!

It’s easy to test, replace your code by read the stream from System.in and print them out right after the thread get the input. DO NOT input anything while the main thread is waiting. Even after your main thread exit, the working thread is still waiting for you input and isAlive() return false. Input something and press enter, the "dead" thread print them out!!!!!! While you may get different result with different System and JVM version.

an easy way to handle this is using the close() method from another thread to stop the InputStream, if it doesn't work close the HttpConnection, and event the socket.... the higher level class you use, the more chance the stream throw an exception.

NOTE: invoking close() on an InputStream may sometimes block when read() and close() are synchronized.

I am not a native English speaker, hope you can understand me.