【发布时间】:2011-08-25 21:01:51
【问题描述】:
我有一个 Java 线程:
class MyThread extends Thread {
@Override
public void run() {
BufferedReader stdin =
new BufferedReader(new InputStreamReader(System.in));
String msg;
try {
while ((msg = stdin.readLine()) != null) {
System.out.println("Got: " + msg);
}
System.out.println("Aborted.");
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
在另一个线程中,如何中止该线程中的stdin.readline() 调用,以便该线程打印Aborted.?我试过System.in.close(),但这没有任何区别,stdin.readline() 仍然阻塞。
我对没有的解决方案感兴趣
- 忙等待(因为这会消耗 100% CPU);
- 正在睡觉(因为那时程序不会立即响应
System.in)。
【问题讨论】:
-
有趣。知道如何中止监听传入客户端套接字数据的线程也会很有趣。希望解决方案与这个问题非常相似:)
-
这是一个从标准输入读取的更普遍的问题 - java.io 的东西正在阻塞 I/O,关于这个更普遍的问题存在许多问题。
-
@Ancide:对于套接字,我有一个解决方案:在另一个线程中关闭套接字会使
MyThread中的readLine引发SocketException和"Socket closed"。所以我可以通过这种方式中止MyThread。