如何使用interruptiblechannel下载文件? (NIO)

时间:2011-02-21 16:54:29

标签: java android

当我接到来电时,我必须立即中断我长时间运行的线程。我想使用Thread.interrupt()方法来做到这一点。

参考文献说:

Threads blocked in an I/O operation of an InterruptibleChannel will 
have their interrupt status set and receive an ClosedByInterruptException. 
Also, the channel will be closed.

在我的帖子中我通过HTTP下载文件,所以我想使用InterruptibleChannel以便立即停止下载。你能给我一些源代码,如何使用InterruptibleChannel下载文件?

这个解决方案对我来说不合适,因为Thread.interrupt()不会中断阻塞IO:

while ((length = httpIn.read(buffer)) > 0) {
       if(Thread.interrupted())
          ....
       else
       {
            fileOut.write(buffer, 0, length);
            fileSize += length;
       }
}

1 个答案:

答案 0 :(得分:1)

中断执行I / O阻塞的线程的一种通用方法是关闭通道。例如,如果线程在套接字上的read()操作中被阻塞,则想要中断它的线程可以关闭套接字。 不确定这种方法是否对您有用,但它是一种常用的解决方案,有时会使用它。