read()
在回答您编辑的问题时,不,在调用时阻塞后台线程不会影响性能。基本上就好像后台线程正在休眠一样。
但是,如果您继续生成后台线程,并且继续让所有这些线程read()
永远处于阻塞状态,那么您将面临非常严重的内存泄漏。它不会降低速度或类似方面的性能,但最终会使您的应用程序崩溃。
所以是的,确保您的后台线程最终终止是很重要的(或者至少要保证如果现有线程没有终止,您的代码不会继续尝试添加新线程)。
这应该处理原始问题:
public interface StreamDataHandler {
public void handleData(byte[] buffer, int numBytes);
public void readFailedWithError(Exception ex);
}
public class DataReader extends Thread {
private StreamDataHandler handler;
private InputStream input;
public DataReader(InputStream in, StreamDataHandler handler) {
super();
this.input = in;
this.handler = handler;
}
@Override
public void run() {
int numRead = 0;
byte[] buffer = new byte[1024];
try {
while ((numRead = input.read(buffer)) != -1) {
if (this.handler != null && numRead > 0) {
this.handler.handleData(buffer, numRead);
}
}
}
catch (Exception e) {
if (this.handler != null) {
this.handler.readFailedWithError(e);
}
}
}
}