线程在空DataInputStream上冻结readUTF

时间:2012-04-26 11:49:06

标签: java multithreading locking

只创建一个线程。在某些情况下,它需要关闭。 在这种情况下,可以通过检查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();       
}

1 个答案:

答案 0 :(得分:2)

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

public void stop() {
    in.close(); // or use something like IOUtils.closeQuietly(in);
    thread.interrupt();
}