繁体   English   中英

Java停止读取输入流时阻塞的线程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM