@Override public void run() { if (testRunning.get()) { while (scheduler.getQueueManager().getQueueSet(TaskPriority.High).executeQueue.size() < 5) { scheduler.execute(this, TaskPriority.High); } } } }.run();
@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; }
@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; }
/** * Checks if there are tasks ready to be run on the scheduler. Generally this is called from * the same thread that would call {@link #tick(ExceptionHandler)} (but does not have to be). * If {@link #tick(ExceptionHandler)} is not currently being called, this call indicates if the * next {@link #tick(ExceptionHandler)} will have at least one task to run. If * {@link #tick(ExceptionHandler)} is currently being invoked, this call will do a best attempt * to indicate if there is at least one more task to run (not including the task which may * currently be running). It's a best attempt as it will try not to block the thread invoking * {@link #tick(ExceptionHandler)} to prevent it from accepting additional work. * * @return {@code true} if there are task waiting to run */ public boolean hasTaskReadyToRun() { for (TaskPriority p : TaskPriority.values()) { if (hasTaskReadyToRun(queueManager.getQueueSet(p))) { return true; } } return false; }
@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)); }
@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 = queueManager.getQueueSet(priority); NoThreadRecurringRateTaskWrapper taskWrapper = new NoThreadRecurringRateTaskWrapper(task, queueSet, nowInMillis(true) + initialDelay, period); queueSet.addScheduled(taskWrapper); }
@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 = queueManager.getQueueSet(priority); NoThreadRecurringRateTaskWrapper taskWrapper = new NoThreadRecurringRateTaskWrapper(task, queueSet, nowInMillis(true) + initialDelay, period); queueSet.addScheduled(taskWrapper); }
@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 = queueManager.getQueueSet(priority); NoThreadRecurringDelayTaskWrapper taskWrapper = new NoThreadRecurringDelayTaskWrapper(task, queueSet, nowInMillis(true) + initialDelay, recurringDelay); queueSet.addScheduled(taskWrapper); }
@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 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 = queueManager.getQueueSet(priority); NoThreadRecurringDelayTaskWrapper taskWrapper = new NoThreadRecurringDelayTaskWrapper(task, queueSet, nowInMillis(true) + initialDelay, recurringDelay); queueSet.addScheduled(taskWrapper); }
@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 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 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 protected OneTimeTaskWrapper doSchedule(Runnable task, long delayInMillis, TaskPriority priority) { QueueSet queueSet = queueManager.getQueueSet(priority); OneTimeTaskWrapper result; if (delayInMillis == 0) { queueSet.addExecute((result = new NoThreadOneTimeTaskWrapper(task, queueSet.executeQueue, nowInMillis(false)))); } else { queueSet.addScheduled((result = new NoThreadOneTimeTaskWrapper(task, queueSet.scheduleQueue, nowInMillis(true) + delayInMillis))); } return result; }
@Override protected OneTimeTaskWrapper doSchedule(Runnable task, long delayInMillis, TaskPriority priority) { QueueSet queueSet = queueManager.getQueueSet(priority); OneTimeTaskWrapper result; if (delayInMillis == 0) { queueSet.addExecute((result = new NoThreadOneTimeTaskWrapper(task, queueSet.executeQueue, nowInMillis(false)))); } else { queueSet.addScheduled((result = new NoThreadOneTimeTaskWrapper(task, queueSet.scheduleQueue, nowInMillis(true) + delayInMillis))); } return result; }
@Override public int getQueuedTaskCount(TaskPriority priority) { if (priority == null) { return getQueuedTaskCount(); } return getQueueManager().getQueueSet(priority).queueSize(); }
@Override public int getQueuedTaskCount() { int result = 0; for (TaskPriority p : TaskPriority.values()) { result += getQueueManager().getQueueSet(p).queueSize(); } return result; }
@Override public int getQueuedTaskCount(TaskPriority priority) { if (priority == null) { return getQueuedTaskCount(); } return getQueueManager().getQueueSet(priority).queueSize(); }
@Override public int getQueuedTaskCount() { int result = 0; for (TaskPriority p : TaskPriority.values()) { result += getQueueManager().getQueueSet(p).queueSize(); } return result; }