/** * Cancels the specified task if it has not run or is not running. * * @param taskRef task reference */ private void cancelTask(AtomicReference<TimerTask> taskRef) { swapAndCancelTask(taskRef, null); }
cancelTask(idleTask); rescheduleTask(maxTask, 0 /* now! */); } else { rescheduleTask(idleTask, maxIdleMillis); rescheduleTask(maxTask, maxBatchMillis);
/** * Returns an immutable copy of the existing items and clear the list. * * @return list of existing items */ private List<T> finalizeCurrentBatch() { List<T> finalizedList; synchronized (items) { finalizedList = ImmutableList.copyOf(items); items.clear(); /* * To avoid reprocessing being triggered on an empty list. */ cancelTask(maxTask); cancelTask(idleTask); } return finalizedList; }
/** * Reschedules the specified task, cancelling existing one if applicable. * * @param taskRef task reference * @param millis delay in milliseconds */ private void rescheduleTask(AtomicReference<TimerTask> taskRef, long millis) { ProcessorTask newTask = new ProcessorTask(); timer.schedule(newTask, millis); swapAndCancelTask(taskRef, newTask); }