public final ScheduledFuture<?> schedule(Runnable task, Trigger trigger) { Assert.notNull(task, "task must not be null"); TriggeredTask<Void> triggeredTask = new TriggeredTask<Void>(task, trigger); return this.schedule(triggeredTask, null, null); }
public final void stop() { this.lifecycleLock.lock(); try { if (this.running) { this.schedulerTask.deactivate(); Thread executingThread = this.schedulerTask.executingThread.get(); if (executingThread != null) { executingThread.interrupt(); } this.scheduledTasks.clear(); synchronized (this.executingTasks) { for (TriggeredTask<?> task : this.executingTasks) { task.cancel(true); } this.executingTasks.clear(); } this.schedulerTask = null; this.running = false; if (logger.isInfoEnabled()) { logger.info("stopped " + this); } } } finally { this.lifecycleLock.unlock(); } }
public void run() { SimpleTaskScheduler.this.executingTasks.add(this); super.runAndReset(); SimpleTaskScheduler.this.executingTasks.remove(this); if (SimpleTaskScheduler.this.isRunning() && !this.isCancelled()) { SimpleTaskScheduler.this.schedule(this, this.scheduledTime, new Date()); } }
public int compareTo(Delayed other) { long thisDelay = this.getDelay(TimeUnit.MILLISECONDS); long otherDelay = other.getDelay(TimeUnit.MILLISECONDS); if (thisDelay < otherDelay) { return -1; } if (thisDelay == otherDelay) { return 0; } return 1; }
public synchronized boolean cancel(boolean mayInterruptIfRunning) { if (!this.isCancelled()) { SimpleTaskScheduler.this.scheduledTasks.remove(this); } return super.cancel(mayInterruptIfRunning); } }
private <V> ScheduledFuture<V> schedule(TriggeredTask<V> triggeredTask, Date lastScheduledRunTime, Date lastCompleteTime) { Date nextRunTime = triggeredTask.trigger.getNextRunTime(lastScheduledRunTime, lastCompleteTime); if (nextRunTime != null) { triggeredTask.setScheduledTime(nextRunTime); this.scheduledTasks.offer(triggeredTask); } return triggeredTask; }