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

我试图用以下代码在java控制台应用程序中设置用户输入超时

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
并没有真正杀死输入线程,应用程序一直在等待输入,只有在收到一些输入并正常终止线程后才退出。但这不在您的问题范围内。

谢谢您的回答。如何确保输入线程被终止?