设置用户输入的超时

是否可以为用户输入设置计时器? 等待10秒 – 进行下一步操作等等。我的意思是

//wait several seconds{ String s = new BufferedReader(new InputStreamReader(System.in)).readLine(); //wait server seconds} //next operation and etc. 

开箱即用,没有。 通常,只有当另一个线程关闭基础流,或者到达输入的末尾时,Reader才会中断read()调用。

由于read()不是所有可中断的,因此这成为一个并发编程问题。 知道超时的线程需要能够中断尝试读取输入的线程。

本质上,读取线程必须轮询Reader的ready()方法,而不是在没有任何内容可读时锁定read()。 如果在java.util.concurrent.Future中包装此轮询和等待操作,则使用超时调用Future的get()方法。

本文详细介绍了一下: http : //www.javaspecialists.eu/archive/Issue153.html

比本杰明考克斯的答案更容易做到这一点的方法是做类似的事情

 int x = 2; // wait 2 seconds at most BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); long startTime = System.currentTimeMillis(); while ((System.currentTimeMillis() - startTime) < x * 1000 && !in.ready()) { } if (in.ready()) { System.out.println("You entered: " + in.readLine()); } else { System.out.println("You did not enter data"); } 

然而,这将比他的解决方案消耗更多的资源。