データの更新を受け取るクラス(以下に表示)があります。私の目的は、最後のデータ更新から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
ます。データの更新を受信するたびに、既存のタスクがキャンセルされ、新しいタスクがスケジュールされます。
このアプローチが大丈夫なのか、それともこれを行うためのより良い方法があるのか疑問に思います。