Java 设置用户输入超时
我试图用以下代码在java控制台应用程序中设置用户输入超时Java 设置用户输入超时,java,executorservice,Java,Executorservice,我试图用以下代码在java控制台应用程序中设置用户输入超时 ExecutorService executor = Executors.newSingleThreadExecutor(); Callable task =() -> { System.out.print("input: "); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); return br.read
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable task =() -> {
System.out.print("input: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
return br.readLine();
};
Future future = executor.submit(task);
String input = null;
try {
input = (String)future.get(10, TimeUnit.SECONDS);
} catch (TimeoutException e) {
future.cancel(true);
System.out.println("Sorry you run out of time!"));
} catch (InterruptedException | ExecutionException e) {
e.getMessage();
} finally {
executor.shutdownNow();
}
10秒后,当用户未输入任何内容时,将显示超时消息。但是,每当用户试图输入某些内容时,程序就会卡住,不会返回输入纠正小的编译问题并输出
input的值
成功输入后,代码工作得非常好:
public class Foo {
public static void main(String[] argv) {
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable task =() -> {
System.out.print("input: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
return br.readLine();
};
Future future = executor.submit(task);
try {
String input = (String)future.get(10, TimeUnit.SECONDS);
System.out.println(input);
} catch (TimeoutException e) {
future.cancel(true);
System.out.println("Sorry you run out of time!");
} catch (InterruptedException | ExecutionException e) {
e.getMessage();
} finally {
executor.shutdownNow();
}
}
}
印刷品
输入:wfqwefqer
wfqwefqer
进程已完成,退出代码为0
但是,您的代码在超时时有一个错误:
shutdownNow
并没有真正杀死输入线程,应用程序一直在等待输入,只有在收到一些输入并正常终止线程后才退出。但这不在您的问题范围内。谢谢您的回答。如何确保输入线程被终止?