我有一个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
)。
MyThread
中的readLine
引发一个带有“Socket closed”的SocketException
。因此,我可以通过这种方式中止MyThread
。 - pts