我试图在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"
并转到下一条指令。
太糟糕了,这不起作用:"解锁线"立即显示在屏幕上,好像它已写入标准输出,并且它似乎不会影响readLine()
。
所以我的问题是:
System.setIn
:它不起作用。最后,我应该通过简单明了来澄清我的意思:只使用线程,避免忙碌等待。提前致谢。
编辑:我不想关闭标准输入,因为我想在第3步之后再次阅读。
答案 0 :(得分:-1)
您是否尝试过简单地致电
System.in.close()
?
答案 1 :(得分:-1)
readLine()必须等待用户输入一些东西。永远,如果没有进入。 在你的情况下,你想让线程在10秒后自动关闭,如果没有输入我认为! 相应地编写你的线程。如果10秒没有用户输入输入,那么主线程应关闭输入等待线程,而不是永远等待。