diff --git a/parfait-core/src/main/java/io/pcp/parfait/QuiescentRegistryListener.java b/parfait-core/src/main/java/io/pcp/parfait/QuiescentRegistryListener.java index f16d3f2..1beb666 100644 --- a/parfait-core/src/main/java/io/pcp/parfait/QuiescentRegistryListener.java +++ b/parfait-core/src/main/java/io/pcp/parfait/QuiescentRegistryListener.java @@ -17,6 +17,7 @@ public class QuiescentRegistryListener implements MonitorableRegistryListener { private volatile long lastTimeMonitorableAdded = 0; private final Object lock = new Object(); private final Supplier clock; + private static TimerTask prevTask = null; public QuiescentRegistryListener(final Runnable runnable, final long quietPeriodInMillis) { this (runnable, new SystemTimePoller(), quietPeriodInMillis, new TimerScheduler(new Timer(QuiescentRegistryListener.class.getName(),true))); @@ -25,19 +26,23 @@ public class QuiescentRegistryListener implements MonitorableRegistryListener { QuiescentRegistryListener(final Runnable runnable, final Supplier clock, final long quietPeriodInMillis, Scheduler scheduler) { this.quiescentScheduler = scheduler; this.clock = clock; - quiescentScheduler.schedule(new TimerTask() { + TimerTask newTask = new TimerTask() { @Override public void run() { synchronized (lock) { if (lastTimeMonitorableAdded > 0 && clock.get().longValue() >= (lastTimeMonitorableAdded + quietPeriodInMillis)) { LOG.info(String.format("New Monitorables detected after quiet period of %dms", quietPeriodInMillis)); + if( prevTask!=null ){ + prevTask.cancel(); + } runnable.run(); lastTimeMonitorableAdded = 0; + prevTask = this; } } } - }, 1000, quietPeriodInMillis - ); + }; + quiescentScheduler.schedule(newTask, 1000, quietPeriodInMillis); } @Override