【发布时间】:2014-11-06 14:38:18
【问题描述】:
我正在尝试在 Java 中实现从控制台读取异步输入。 基本上,我想这样做:
- 生成一个线程 T,它使用 BufferedReader 上的 readLine() 读取标准输入
- 继续程序
- 10 秒后,停止 T
问题是 T 中的 readLine() 调用,我无法阻止。
由于中断线程不起作用,我想我会尝试将数据从代码发送到标准输入,以解锁readLine()。
所以我尝试了以下方法:10 秒后,做
FileOutputStream os = new FileOutputStream(FileDescriptor.in);
os.write("Unblocking line\n");
我认为它会像这样工作:我正在像在管道中一样写入标准输入,因此 T 中的代码应该读取 "Unblocking line\n" 并转到下一条指令。
太糟糕了,这不起作用:“Unblocking line”会立即显示在屏幕上,就像它被写入标准输出一样,它似乎不会影响readLine()。
所以我的问题是:
- 为什么我的推理有误?
- 有没有一种简单、干净的方法来实现我想做的事情?请注意,我知道this solution。另外,请不要建议使用
System.setIn:它不起作用。最后,我应该澄清一下我所说的简单和干净的含义:只使用线程,避免忙于等待。
提前致谢。
编辑:我不想关闭标准输入,因为我想在第 3 步之后再次读取。
【问题讨论】:
-
您尝试中断线程...您尝试关闭 BufferedReader 吗?
-
你已经看过
java.nio包了吗?
标签: java multithreading asynchronous input java-io