我在commmand提示符下运行一些commnads。我正在等待最后一个命令的输出完成。我必须读取输出并执行操作。我的命令输出非常动态,我无法预测何时可以停止阅读。
我遇到的问题我不知道何时停止阅读。如果假设我保持while read(),那么我的上一个命令输出不会以新行结束。是否有任何机制可以告诉我,如果过去5分钟没有关于stdin的活动,那么我会得到一些警告?
答案 0 :(得分:0)
我采用的方法是创建一个实现Runnable
的类,它监视共享AtomicInteger
标志的值。此InputRunnable
类休眠5分钟(300000毫秒),然后唤醒以检查该值是否已由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);
}
}
}
我在本地测试了这段代码并且它似乎正在运行,但如果您在系统上运行它有任何问题,请告诉我。