@Override public boolean canExecute(short executeReference) { synchronized (queueSet.scheduleQueue.getModificationLock()) { if (super.canExecute(executeReference)) { int index = queueSet.scheduleQueue.lastIndexOf(this); if (index != queueSet.scheduleQueue.size() - 1) { for (int i = index + 1; i < queueSet.scheduleQueue.size(); i++) { if (queueSet.scheduleQueue.get(i).getRunTime() != Long.MAX_VALUE) { IllegalStateException e = new IllegalStateException("Invalid queue state: " + queueSet.scheduleQueue); e.printStackTrace(); throw e; } } } return true; } else { return false; } } } }
/** * Used for gaining compatibility with java.util.concurrent when a {@link Delayed} object is * needed. * * @param pScheduler Scheduler to submit task to * @param task Task to be submitted * @param priority Priority for task to be submitted at * @param initialDelay initial delay for task to execute * @param delayInMs recurring delay for task to execute * @return Delayed implementation which corresponds to executed task */ public static Delayed doScheduleWithFixedDelayAndGetDelayed(PriorityScheduler pScheduler, Runnable task, TaskPriority priority, long initialDelay, long delayInMs) { QueueSet queueSet = pScheduler.taskQueueManager.getQueueSet(priority); RecurringDelayTaskWrapper rdtw = new RecurringDelayTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, delayInMs); pScheduler.addToScheduleQueue(queueSet, rdtw); return new DelayedTaskWrapper(rdtw); }
/** * Used for gaining compatibility with java.util.concurrent when a {@link Delayed} object is * needed. * * @param pScheduler Scheduler to submit task to * @param task Task to be submitted * @param priority Priority for task to be submitted at * @param initialDelay initial delay for task to execute * @param delayInMs recurring delay for task to execute * @return Delayed implementation which corresponds to executed task */ public static Delayed doScheduleWithFixedDelayAndGetDelayed(PriorityScheduler pScheduler, Runnable task, TaskPriority priority, long initialDelay, long delayInMs) { QueueSet queueSet = pScheduler.taskQueueManager.getQueueSet(priority); RecurringDelayTaskWrapper rdtw = new RecurringDelayTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, delayInMs); pScheduler.addToScheduleQueue(queueSet, rdtw); return new DelayedTaskWrapper(rdtw); }
@Override public void scheduleWithFixedDelay(Runnable task, long initialDelay, long recurringDelay, TaskPriority priority) { ArgumentVerifier.assertNotNull(task, "task"); ArgumentVerifier.assertNotNegative(initialDelay, "initialDelay"); ArgumentVerifier.assertNotNegative(recurringDelay, "recurringDelay"); if (priority == null) { priority = defaultPriority; } QueueSet queueSet = taskQueueManager.getQueueSet(priority); addToScheduleQueue(queueSet, new RecurringDelayTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, recurringDelay)); }
@Override public void scheduleWithFixedDelay(Runnable task, long initialDelay, long recurringDelay, TaskPriority priority) { ArgumentVerifier.assertNotNull(task, "task"); ArgumentVerifier.assertNotNegative(initialDelay, "initialDelay"); ArgumentVerifier.assertNotNegative(recurringDelay, "recurringDelay"); if (priority == null) { priority = defaultPriority; } QueueSet queueSet = taskQueueManager.getQueueSet(priority); addToScheduleQueue(queueSet, new RecurringDelayTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, recurringDelay)); }