我在命令提示符下运行了一些命令。我正在等待最后一个命令的输出完成。我必须阅读输出并执行操作。我的命令输出非常动态,无法预测何时停止读取。
我遇到了我不知道何时停止阅读的问题。如果假设我保留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);
}
}
}
我在本地测试了此代码,它似乎可以正常工作,但是如果您在使它在系统上运行时遇到任何问题,请告诉我。