我有一個接收數據更新的類(如下所示)。我的目標是查明自上次數據更新後5分鐘沒有收到數據更新。自上次數據事件以來的時間過去了
這是我的代碼:
public class DataListener {
private final ScheduledThreadPoolExecutor executor;
private ScheduledFuture<Void> future;
public DataUpdateListener() {
executor = new ScheduledThreadPoolExecutor(1);
}
/**
* Start listening for data.
*/
public void start() {
// do some setup...
rescheduleTask();
}
/**
* Called whenever a data event is received.
*/
public void onEvent(final DataEvent event) {
System.out.println("Received event: " + event);
rescheduleTask();
}
private synchronized void rescheduleTask() {
// cancel the existing task
if (future != null) {
future.cancel(true);
executor.purge();
}
// schedule a new one
future = executor.schedule(new Callable<Void>() {
@Override
public Void call() {
System.out.println("No data events received in the last 5 minutes!");
// do some stuff...
shutdown();
return null;
}
}, 5, TimeUnit.MINUTES);
}
void shutdown() {
executor.shutdownNow();
}
}
類保持ScheduledThreadPoolExecutor
。無論何時收到數據更新,它都會取消現有任務並安排新的任務。
我想知道如果這種方法是好的,或者如果有更好的方法來做到這一點。
我可能有點偏離,但如果我理解正確,您正在嘗試實施關機定時器,即如果現在在5分鐘內收到事件,請關閉執行程序? – posdef
不僅如此......如果在5分鐘內沒有收到任何事件,我必須做一些其他處理。 – dogbane