/** * 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 periodInMillis recurring delay for task to execute * @return Delayed implementation which corresponds to executed task */ public static Delayed doScheduleAtFixedRateAndGetDelayed(PriorityScheduler pScheduler, Runnable task, TaskPriority priority, long initialDelay, long periodInMillis) { QueueSet queueSet = pScheduler.taskQueueManager.getQueueSet(priority); RecurringRateTaskWrapper rrtw = new RecurringRateTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, periodInMillis); pScheduler.addToScheduleQueue(queueSet, rrtw); return new DelayedTaskWrapper(rrtw); }
/** * 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 protected OneTimeTaskWrapper doSchedule(Runnable task, long delayInMillis, TaskPriority priority) { QueueSet queueSet = taskQueueManager.getQueueSet(priority); OneTimeTaskWrapper result; if (delayInMillis == 0) { addToExecuteQueue(queueSet, (result = new ImmediateTaskWrapper(task, queueSet.executeQueue))); } else { addToScheduleQueue(queueSet, (result = new OneTimeTaskWrapper(task, queueSet.scheduleQueue, Clock.accurateForwardProgressingMillis() + delayInMillis))); } return result; }
/** * 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 periodInMillis recurring delay for task to execute * @return Delayed implementation which corresponds to executed task */ public static Delayed doScheduleAtFixedRateAndGetDelayed(PriorityScheduler pScheduler, Runnable task, TaskPriority priority, long initialDelay, long periodInMillis) { QueueSet queueSet = pScheduler.taskQueueManager.getQueueSet(priority); RecurringRateTaskWrapper rrtw = new RecurringRateTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, periodInMillis); pScheduler.addToScheduleQueue(queueSet, rrtw); return new DelayedTaskWrapper(rrtw); }
/** * 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 protected OneTimeTaskWrapper doSchedule(Runnable task, long delayInMillis, TaskPriority priority) { QueueSet queueSet = taskQueueManager.getQueueSet(priority); OneTimeTaskWrapper result; if (delayInMillis == 0) { addToExecuteQueue(queueSet, (result = new ImmediateTaskWrapper(task, queueSet.executeQueue))); } else { addToScheduleQueue(queueSet, (result = new OneTimeTaskWrapper(task, queueSet.scheduleQueue, Clock.accurateForwardProgressingMillis() + delayInMillis))); } return result; }
@Override public void scheduleAtFixedRate(Runnable task, long initialDelay, long period, TaskPriority priority) { ArgumentVerifier.assertNotNull(task, "task"); ArgumentVerifier.assertNotNegative(initialDelay, "initialDelay"); ArgumentVerifier.assertGreaterThanZero(period, "period"); if (priority == null) { priority = defaultPriority; } QueueSet queueSet = taskQueueManager.getQueueSet(priority); addToScheduleQueue(queueSet, new RecurringRateTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, period)); }
@Override public void scheduleAtFixedRate(Runnable task, long initialDelay, long period, TaskPriority priority) { ArgumentVerifier.assertNotNull(task, "task"); ArgumentVerifier.assertNotNegative(initialDelay, "initialDelay"); ArgumentVerifier.assertGreaterThanZero(period, "period"); if (priority == null) { priority = defaultPriority; } QueueSet queueSet = taskQueueManager.getQueueSet(priority); addToScheduleQueue(queueSet, new RecurringRateTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, period)); }
@Override protected void addToScheduleQueue(QueueSet queueSet, TaskWrapper task) { if (task instanceof OneTimeTaskWrapper) { verifyOneTimeTaskQueueSet(queueSet, (OneTimeTaskWrapper)task); } else if (task instanceof RecurringTaskWrapper) { RecurringTaskWrapper recurringTask = (RecurringTaskWrapper)task; if (queueSet != recurringTask.queueSet) { throw new IllegalStateException("QueueSet mismatch"); } if (task instanceof RecurringDelayTaskWrapper) { task = new StrictRecurringDelayTaskWrapper(task.task, recurringTask.queueSet, recurringTask.nextRunTime, ((RecurringDelayTaskWrapper)recurringTask).recurringDelay); } else { task = new StrictRecurringRateTaskWrapper(task.task, recurringTask.queueSet, recurringTask.nextRunTime, ((RecurringRateTaskWrapper)recurringTask).period); } } else { throw new UnsupportedOperationException("Unhandled task type"); } super.addToScheduleQueue(queueSet, task); }
@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)); }
@Test public void addToQueueTest() { PrioritySchedulerServiceFactory factory = getPrioritySchedulerFactory(); long taskDelay = 1000 * 10; // make it long to prevent it from getting consumed from the queue PriorityScheduler scheduler = factory.makePriorityScheduler(1); try { scheduler.addToScheduleQueue(scheduler.taskQueueManager.highPriorityQueueSet, new OneTimeTaskWrapper(new TestRunnable(), null, Clock.lastKnownForwardProgressingMillis() + taskDelay)); assertEquals(1, scheduler.taskQueueManager.highPriorityQueueSet.scheduleQueue.size()); assertEquals(0, scheduler.taskQueueManager.lowPriorityQueueSet.scheduleQueue.size()); scheduler.addToScheduleQueue(scheduler.taskQueueManager.lowPriorityQueueSet, new OneTimeTaskWrapper(new TestRunnable(), null, Clock.lastKnownForwardProgressingMillis() + taskDelay)); assertEquals(1, scheduler.taskQueueManager.highPriorityQueueSet.scheduleQueue.size()); assertEquals(1, scheduler.taskQueueManager.lowPriorityQueueSet.scheduleQueue.size()); } finally { factory.shutdown(); } }