从标准输入异步读取

时间:2014-09-12 12:02:37

标签: java multithreading asynchronous input java-io

我试图在Java中实现从控制台读取异步输入。 基本上,我想这样做:

  
      
  1. 产生一个线程T,它在标准输入上读取BufferedReader上的readLine()
  2.   
  3. 继续执行该计划
  4.   
  5. 10秒后,停止T
  6.   

问题是T中的readLine()来电,我无法阻止。 由于中断线程不起作用,我想我会尝试从代码发送数据到标准输入,以解除阻塞readLine()

所以我尝试了以下内容:10秒后,

FileOutputStream os = new FileOutputStream(FileDescriptor.in);
os.write("Unblocking line\n");

我认为它会像这样工作:我在管道中写入标准输入,因此T中的代码应该读取"Unblocking line\n"并转到下一条指令。 太糟糕了,这不起作用:"解锁线"立即显示在屏幕上,好像它已写入标准输出,并且它似乎不会影响readLine()

所以我的问题是:

  1. 为什么我的推理错了?
  2. 是否有简单,干净的方法来实现我想要做的事情?请注意,我了解this solution。另外,请不要建议使用System.setIn:它不起作用。最后,我应该通过简单明了来澄清我的意思:只使用线程,避免忙碌等待。
  3. 提前致谢。

    编辑:我不想关闭标准输入,因为我想在第3步之后再次阅读。

2 个答案:

答案 0 :(得分:-1)

您是否尝试过简单地致电

System.in.close()

答案 1 :(得分:-1)

readLine()必须等待用户输入一些东西。永远,如果没有进入。 在你的情况下,你想让线程在10秒后自动关闭,如果没有输入我认为! 相应地编写你的线程。如果10秒没有用户输入输入,那么主线程应关闭输入等待线程,而不是永远等待。