Java:如何中止从System.in中读取线程
|
我有一个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();
}
}
}
}
在另一个线程中,如何中止该线程中的“ 1”调用,以便该线程显示“ 2”?我尝试过System.in.close()
,但这没什么区别,stdin.readline()
仍在阻塞。
我对没有
忙于等待(因为这会消耗100%的CPU);
睡眠(因为该程序不会立即响应System.in
)。
没有找到相关结果
已邀请:
6 个回复
好按紊叉
确实不在一起。 因此,首先将其拆分,以使线程代码不会碰到任何静态字符,包括
。 线程从
读取并传递到缓冲区。将ѭ8传递到现有的线程中,该线程从缓冲区读取数据,但还检查您是否没有中止。
捻盒愧杯
中止
读取。 现在,我不知道这种方法是否会泄漏,是否可移植或是否有任何非显而易见的副作用。就个人而言,我不愿意使用它。 您也许可以使用NIO通道和文件描述符执行某些操作-我自己对它们的实验未产生任何结果。
卧沫
现在调用
的线程可以中断,并且readline()将抛出
。
哩翔购
和ѭ16simple的简单实现。主线程在中断工作线程之前等待5秒钟。在这种情况下,工作线程基本上处于繁忙等待状态,所以并不是很好(一直循环并检查
,如果没有准备好输入,您当然可以让工作线程休眠一会儿):
如果BufferedReader在读取行中被阻塞,或者似乎至少我找不到一个(使用System.in),似乎没有办法真正中断BufferedReader。
磐乓铝举
中断方法将引发一个InterrupedtException,您可以在此之后处理代码。
舞备联