/** * * Construct a new single threaded sub-pool with default task priority behaviors. * * @param delegateScheduler Scheduler to gain CPU time for task execution * @param defaultPriority Default priority for tasks submitted to this pool * @param maxWaitForLowPriorityInMs time low priority tasks to wait if there are high priority tasks ready to run */ public SingleThreadSchedulerSubPool(SchedulerService delegateScheduler, TaskPriority defaultPriority, long maxWaitForLowPriorityInMs) { super(defaultPriority); this.delegateScheduler = delegateScheduler; this.noThreadScheduler = new NoThreadScheduler(defaultPriority, maxWaitForLowPriorityInMs); this.tickTask = new TickTask(delegateScheduler); }
@Override protected OneTimeTaskWrapper doSchedule(Runnable task, long delayInMillis, TaskPriority priority) { OneTimeTaskWrapper result = noThreadScheduler.doSchedule(task, delayInMillis, priority); if (delayInMillis > 0) { delegateScheduler.schedule(() -> tickTask.signalToRunImmediately(true), delayInMillis); } else { tickTask.signalToRun(); } return result; }
/** * * Construct a new single threaded sub-pool with default task priority behaviors. * * @param delegateScheduler Scheduler to gain CPU time for task execution * @param defaultPriority Default priority for tasks submitted to this pool * @param maxWaitForLowPriorityInMs time low priority tasks to wait if there are high priority tasks ready to run */ public SingleThreadSchedulerSubPool(SchedulerService delegateScheduler, TaskPriority defaultPriority, long maxWaitForLowPriorityInMs) { super(defaultPriority); this.delegateScheduler = delegateScheduler; this.noThreadScheduler = new NoThreadScheduler(defaultPriority, maxWaitForLowPriorityInMs); this.tickTask = new TickTask(delegateScheduler); }
@Override protected OneTimeTaskWrapper doSchedule(Runnable task, long delayInMillis, TaskPriority priority) { OneTimeTaskWrapper result = noThreadScheduler.doSchedule(task, delayInMillis, priority); if (delayInMillis > 0) { delegateScheduler.schedule(() -> tickTask.signalToRunImmediately(true), delayInMillis); } else { tickTask.signalToRun(); } return result; }
@Override public void scheduleAtFixedRate(Runnable task, long initialDelay, long period, TaskPriority priority) { noThreadScheduler.scheduleAtFixedRate(task, initialDelay, period, priority); delegateScheduler.scheduleAtFixedRate(() -> tickTask.signalToRunImmediately(true), initialDelay, period); }
@Override public void scheduleWithFixedDelay(Runnable task, long initialDelay, long recurringDelay, TaskPriority priority) { noThreadScheduler.scheduleWithFixedDelay(task, initialDelay, recurringDelay, priority); delegateScheduler.scheduleWithFixedDelay(() -> tickTask.signalToRunImmediately(true), initialDelay, recurringDelay); }
@Override public void scheduleWithFixedDelay(Runnable task, long initialDelay, long recurringDelay, TaskPriority priority) { noThreadScheduler.scheduleWithFixedDelay(task, initialDelay, recurringDelay, priority); delegateScheduler.scheduleWithFixedDelay(() -> tickTask.signalToRunImmediately(true), initialDelay, recurringDelay); }
@Override public void scheduleAtFixedRate(Runnable task, long initialDelay, long period, TaskPriority priority) { noThreadScheduler.scheduleAtFixedRate(task, initialDelay, period, priority); delegateScheduler.scheduleAtFixedRate(() -> tickTask.signalToRunImmediately(true), initialDelay, period); }