1

作成中のスレッドは 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 との違いの 1 つです) 代わりに、割り込みを呼び出す前にストリームを閉じることができ、これにより IOException がトリガーされます。

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