gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:12:35 24 4
gpt4 key购买 nike

据我了解,一旦线程启动,它可以完成其操作并自动停止,或者如果它在循环中执行某些工作,则需要定期检查 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 秒没有停止)。

关于Java 停止在输入流读取上阻塞的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49779034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com