只创建一个线程。在某些情况下,它需要关闭。
在这种情况下,可以通过检查isInterrupted()
来完成。但是如果存在空的InputStream,它会在in.readUTF()
上冻结。如何解决这个问题?
DataInputStream in;
....
public void stop() {
thread.interrupt();
}
public void run() {
while(true) {
String str = in.readUTF(); // locking here, when stream is empty
S.o.p(str)
if(isInterrupted) {
return;
}}
}
public void main(String args[]) {
Thread thread = new Thread();
}
答案 0 :(得分:2)
您无法中断被阻止的InputStream。 (这是与NIO的区别之一)您可以在调用中断之前关闭流,这将触发IOException。
public void stop() {
in.close(); // or use something like IOUtils.closeQuietly(in);
thread.interrupt();
}