如果没有键入,则如何使用超时检查scanner.hasnext(system.in)?[英] How to check Scanner.hasNext(System.in) with a timeout if nothing is typed?

问题描述

Scanner sc = new Scanner(System.in);

扫描仪可用于读取文本文件,用户输入流等.我专门使用它来读取用户输入,如上所述.

与我上面制作的扫描仪,因为它是'乘坐'system.in,在没有下一个输入时调用它的hasnext()将导致相关线程阻止,直到它在下一步并返回时返回true做.我想检查,搬家式,天气有数据接下来,而不是像hasnext()返回,天气可以下一个数据.

其他问题通过启动一个线程等待哈乱()并解决了问员的问题而解决了这一点.这不会有任何问题.

一个有用的代码块是一些调用hasnext()的一些代码,如果它没有在10ms内获得答案,则返回false.

我已经阅读了规则并试图遵守他们,但看到这是我的第一个问题之一,如果我不是这样做的话,请唱出.

提前感谢.

推荐答案

我看到在这里有一个生产者 - 消费者没有错:

// Shared queue
final Queue<String> messages = new ConcurrentLinkedQueue<>();

// Non-blocking consumer
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(new Runnable(){
    @Override
    public void run() {
        // non-blocking
        while((String message = messages.poll()) != null) {
            // do something
        }
    }
}, 0, 10, TimeUnit.MILLISECONDS);

// Blocking producer
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
    messages.add(sc.next());
}

消费者可以在共享Queue上非阻塞.只有生产者知道它一旦读取新的消息就会填写.

本文地址:https://www.itbaoku.cn/post/978319.html