我在命令提示符下运行了一些命令。我正在等待最后一个命令的输出完成。我必须阅读输出并执行操作。我的命令输出非常动态,无法预测何时停止读取。

我遇到了我不知道何时停止阅读的问题。如果假设我保留while read(),那么我的最后一条命令输出不会以换行结尾。是否有任何机制可以告诉我在过去5分钟内stdin上没有任何活动,那么我会得到一些警报吗?

最佳答案

我采用的方法是创建一个实现Runnable的类,该类监视共享的AtomicInteger标志的值。该InputRunnable类休眠5分​​钟(300000 ms),然后醒来以检查是否已通过main方法设置该值。如果用户在最近5分钟内至少输入了一个输入,则该标志将设置为1,并且InputRunnable将继续执行。如果用户在最近5分钟内未输入任何输入,则线程将调用System.exit(),这将终止整个应用程序。

public class InputRunnable implements Runnable {
    private AtomicInteger count;

    public InputRunnable(AtomicInteger count) {
        this.count = count;
    }

    public void run() {
        do {
            try {
                Thread.sleep(300000);               // sleep for 5 minutes
            } catch (InterruptedException e) {
                // log error
            }

            if (count.decrementAndGet() < 0) {      // check if user input occurred
                System.exit(0);                     // if not kill application
            }
        } while(true);
    }
}

public class MainThreadClass {
    public static void main(String args[]) {
        AtomicInteger count = new AtomicInteger(0);
        InputRunnable inputRunnable = new InputRunnable(count);
        Thread t = new Thread(inputRunnable);
        t.start();

        while (true) {
            System.out.println("Enter a number:");
            Scanner in = new Scanner(System.in);
            int num = in.nextInt();                 // scan for user input

            count.set(1);
        }
    }
}


我在本地测试了此代码,它似乎可以正常工作,但是如果您在使它在系统上运行时遇到任何问题,请告诉我。

09-20 09:38