Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用中断频道下载文件?(NIO)_Java_Android - Fatal编程技术网

Java 如何使用中断频道下载文件?(NIO)

Java 如何使用中断频道下载文件?(NIO),java,android,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. 在我的线程中,我

当我接到来电时,我必须立即中断长时间运行的线程。我想使用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下载一个文件,所以我想使用InterruptableChannel来立即停止下载。你能给我一些源代码,如何使用中断频道下载文件吗

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

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

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

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

现在我可以看到如何使用NIO下载文件,但它不使用InterruptableChannel:现在我可以看到如何使用NIO下载文件,但它不使用InterruptableChannel: