[英]Java stopping a thread blocked on input stream read
据我了解,一旦启动线程,它就可以完成其操作并自动停止,或者如果它在循环中执行某些工作,则需要定期检查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
}
那么在这种情况下我们如何才能停止该正在运行的线程?
如果您知道实际的流类型,则可能发生这种情况。 例如,在BufferedInputStream
情况下,您可以使用available()
,以找出可以读取多少个字节而不会被阻塞。
通常,为了能够中断线程执行,您应该尝试使用较小的缓冲区读取流。
但是,如果您希望尽管缓冲区很小,但读取操作仍会阻塞很长时间,并且希望能够在这一点上停止,则可以采用准备接收Thread.stop()
的方式编写代码。 (例如,如果线程在发送interrupt()
后5秒钟仍未停止)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.