据我了解,一旦线程启动,它可以完成其操作并自动停止,或者如果它在循环中执行某些工作,则需要定期检查Thread.isInterrupted()以确定它是否需要退出循环。
public void run() {
//initialize input stream
.....
byte[] buffer = new byte[1024];
int len = -1;
while((len = inputStream.read(buffer)) != -1 &&
!Thread.isInterrupted()) {
//write the buffer to some output stream
}
}
但是,我们假设线程卡在: -
的调用中public void run() {
//initialize input stream
.....
InputStream.read(buffer)
here, buffer = new byte[FILE_SIZE]
and FILE_SIZE = 100 * 1024 * 1024;//100 MB
}
那么我们如何在这种情况下停止这个正在运行的线程呢?
答案 0 :(得分:2)
如果您知道实际的流类型,就会发生这种情况。例如在BufferedInputStream
的情况下,您可以使用available()
来查找可以在不被阻止的情况下读取多少字节。
通常为了能够中断线程执行,你应该尝试使用较小的缓冲区读取流
但是,如果您希望尽管缓冲区大小很小,读取操作仍然可以长时间阻塞,并且您希望能够在此时停止,您可以以为接收Thread.stop()
准备的方式编写代码(例如,如果线程在发送interrupt()
后5秒钟没有停止。)