/** * Constructs a new {@link NoThreadScheduler} scheduler with specified default priority behavior. * * @param defaultPriority Default priority for tasks which are submitted without any specified priority * @param maxWaitForLowPriorityInMs time low priority tasks to wait if there are high priority tasks ready to run */ public NoThreadScheduler(TaskPriority defaultPriority, long maxWaitForLowPriorityInMs) { super(defaultPriority); queueManager = new QueueManager(queueListener = new QueueSetListener() { @Override public void handleQueueUpdate() { Thread t = blockingThread.get(); if (t != null) { LockSupport.unpark(t); } } }, maxWaitForLowPriorityInMs); blockingThread = new AtomicReference<>(null); tickRunning = false; tickCanceled = false; // call to verify and set values setMaxWaitForLowPriority(maxWaitForLowPriorityInMs); }
try { while (true) { TaskWrapper nextTask = queueManager.getNextTask(); if (nextTask == null) { if (queued) { // we can only park after we have queued, then checked again for a result
@Override public int getWaitingForExecutionTaskCount(TaskPriority priority) { if (priority == null) { return getWaitingForExecutionTaskCount(); } QueueSet qs = getQueueManager().getQueueSet(priority); int result = qs.executeQueue.size(); for (int i = 0; i < qs.scheduleQueue.size(); i++) { try { if (qs.scheduleQueue.get(i).getScheduleDelay() > 0) { break; } else { result++; } } catch (IndexOutOfBoundsException e) { break; } } return result; }
try { while (true) { TaskWrapper nextTask = queueManager.getNextTask(); if (nextTask == null) { if (queued) { // we can only park after we have queued, then checked again for a result
throw new InterruptedException(); TaskWrapper nextTask = queueManager.getNextTask(); if (nextTask == null) { LockSupport.park();
throw new InterruptedException(); TaskWrapper nextTask = queueManager.getNextTask(); if (nextTask == null) { LockSupport.park();
AbstractPriorityScheduler result = factory.makeAbstractPriorityScheduler(1); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000)); result.getQueueManager().getQueueSet(TaskPriority.Low) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000));
AbstractPriorityScheduler result = factory.makeAbstractPriorityScheduler(1); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000)); result.getQueueManager().getQueueSet(TaskPriority.Low) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000));
AbstractPriorityScheduler result = factory.makeAbstractPriorityScheduler(1); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000)); result.getQueueManager().getQueueSet(TaskPriority.Starvable) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Starvable) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Starvable) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Starvable) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000));
AbstractPriorityScheduler result = factory.makeAbstractPriorityScheduler(1); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.High) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000)); result.getQueueManager().getQueueSet(TaskPriority.Low) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .executeQueue.add(new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(0, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis())); result.getQueueManager().getQueueSet(TaskPriority.Low) .scheduleQueue.add(1, new OneTimeTaskWrapper(DoNothingRunnable.instance(), null, Clock.lastKnownForwardProgressingMillis() + 1000));
TaskWrapper tw = queueManager.getNextTask(); if (tw != null) { return tw.getRunTime() - nowInMillis(true);
TaskWrapper tw = queueManager.getNextTask(); if (tw != null) { return tw.getRunTime() - nowInMillis(true);
/** * Used for gaining compatibility with java.util.concurrent when a {@link Delayed} object is * needed. * * @param scheduler 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(SingleThreadScheduler scheduler, Runnable task, TaskPriority priority, long initialDelay, long periodInMillis) { NoThreadScheduler nts = scheduler.getRunningScheduler(); QueueSet queueSet = nts.queueManager.getQueueSet(priority); NoThreadRecurringRateTaskWrapper rt = nts.new NoThreadRecurringRateTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, periodInMillis); queueSet.addScheduled(rt); return new DelayedTaskWrapper(rt); }
/** * Used for gaining compatibility with java.util.concurrent when a {@link Delayed} object is * needed. * * @param scheduler 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(SingleThreadScheduler scheduler, Runnable task, TaskPriority priority, long initialDelay, long periodInMillis) { NoThreadScheduler nts = scheduler.getRunningScheduler(); QueueSet queueSet = nts.queueManager.getQueueSet(priority); NoThreadRecurringRateTaskWrapper rt = nts.new NoThreadRecurringRateTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, periodInMillis); queueSet.addScheduled(rt); return new DelayedTaskWrapper(rt); }
/** * Used for gaining compatibility with java.util.concurrent when a {@link Delayed} object is * needed. * * @param scheduler 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(SingleThreadScheduler scheduler, Runnable task, TaskPriority priority, long initialDelay, long delayInMs) { NoThreadScheduler nts = scheduler.getRunningScheduler(); QueueSet queueSet = nts.queueManager.getQueueSet(priority); NoThreadRecurringDelayTaskWrapper rdt = nts.new NoThreadRecurringDelayTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, delayInMs); queueSet.addScheduled(rdt); return new DelayedTaskWrapper(rdt); }
/** * Used for gaining compatibility with java.util.concurrent when a {@link Delayed} object is * needed. * * @param scheduler 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(SingleThreadScheduler scheduler, Runnable task, TaskPriority priority, long initialDelay, long delayInMs) { NoThreadScheduler nts = scheduler.getRunningScheduler(); QueueSet queueSet = nts.queueManager.getQueueSet(priority); NoThreadRecurringDelayTaskWrapper rdt = nts.new NoThreadRecurringDelayTaskWrapper(task, queueSet, Clock.accurateForwardProgressingMillis() + initialDelay, delayInMs); queueSet.addScheduled(rdt); return new DelayedTaskWrapper(rdt); }
/** * 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 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); }
/** * Constructs a new {@link NoThreadScheduler} scheduler with specified default priority behavior. * * @param defaultPriority Default priority for tasks which are submitted without any specified priority * @param maxWaitForLowPriorityInMs time low priority tasks to wait if there are high priority tasks ready to run */ public NoThreadScheduler(TaskPriority defaultPriority, long maxWaitForLowPriorityInMs) { super(defaultPriority); queueManager = new QueueManager(queueListener = new QueueSetListener() { @Override public void handleQueueUpdate() { Thread t = blockingThread.get(); if (t != null) { LockSupport.unpark(t); } } }, maxWaitForLowPriorityInMs); blockingThread = new AtomicReference<>(null); tickRunning = false; tickCanceled = false; // call to verify and set values setMaxWaitForLowPriority(maxWaitForLowPriorityInMs); }
/** * 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); }