1

只有一个线程正在创建。在某些情况下,它需要关闭。在这种情况下,可以通过检查来完成isInterrupted()。但是in.readUTF()如果有空的InputStream,它就会冻结。如何解决这个问题?

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();       
}
4

1 回答 1

2

您不能中断阻塞的 InputStream。(这是与 NIO 的区别之一)您可以在调用中断之前关闭流,这将触发 IOException。

public void stop() {
    in.close(); // or use something like IOUtils.closeQuietly(in);
    thread.interrupt();
}
于 2012-04-26T12:02:47.563 回答