我正在運行一些commnads上的命令提示符。我正在等待最後的命令輸出完成。我必須讀取輸出並執行操作。我的命令輸出非常動態,我無法預測何時可以停止閱讀。從stdin讀取,但無法知道何時停止
我有問題,我不知道什麼時候停止閱讀。如果假設我保留了read(),那麼我的最後一個命令輸出不會以新行結束。有什麼mechenism可以告訴我,如果最後5分鐘沒有任何stdin的活動,那麼我得到一些警報?
我正在運行一些commnads上的命令提示符。我正在等待最後的命令輸出完成。我必須讀取輸出並執行操作。我的命令輸出非常動態,我無法預測何時可以停止閱讀。從stdin讀取,但無法知道何時停止
我有問題,我不知道什麼時候停止閱讀。如果假設我保留了read(),那麼我的最後一個命令輸出不會以新行結束。有什麼mechenism可以告訴我,如果最後5分鐘沒有任何stdin的活動,那麼我得到一些警報?
我採取的方法是創建一個實現Runnable
的類,該類監視共享的AtomicInteger
標誌的值。這個InputRunnable
類睡眠5分鐘(300000毫秒),然後醒來檢查值是否已由主方法設置。如果用戶在最近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);
}
}
}
我在本地測試此代碼,它似乎是工作,但請讓我知道如果你獲得到您的系統上運行的任何問題。
@AnimeshJain請檢閱我的答案,並讓我知道它是否解決了您的問題。 –
您可以創建一個線程計時器,該計時器向下計數5分鐘,並執行System.exit(),除非調用read()重置計時器。 –