|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--org.javagroups.util.TimeScheduler
Fixed-delay & fixed-rate single thread scheduler
The scheduler supports varying scheduling intervals by asking the task
every time for its next preferred scheduling interval. Scheduling can
either be fixed-delay or fixed-rate. The notions are
borrowed from java.util.Timer and retain the same meaning.
I.e. in fixed-delay scheduling, the task's new schedule is calculated
as:
new_schedule = time_task_starts + scheduling_interval
In fixed-rate scheduling, the next schedule is calculated as:
new_schedule = time_task_was_supposed_to_start + scheduling_interval
The scheduler internally holds a queue of tasks sorted in ascending order according to their next execution time. A task is removed from the queue if it is cancelled, i.e. if TimeScheduler.Task.isCancelled() returns true.
The scheduler internally uses a java.util.SortedSet to keep tasks sorted. java.util.Timer uses an array arranged as a binary heap that doesn't shrink. It is likely that the latter arrangement is faster.
Initially, the scheduler is in SUSPENDed mode, start() need not be called: if a task is added, the scheduler gets started automatically. Calling start() starts the scheduler if it's suspended or stopped else has no effect. Once stop() is called, added tasks will not restart it: start() has to be called to restart the scheduler.
Inner Class Summary | |
static interface |
TimeScheduler.Task
The interface that submitted tasks must implement |
Constructor Summary | |
TimeScheduler()
Create a scheduler that executes tasks in dynamically adjustable intervals |
|
TimeScheduler(long suspend_interval)
Create a scheduler that executes tasks in dynamically adjustable intervals |
Method Summary | |
void |
add(TimeScheduler.Task t)
Add a task for execution at adjustable intervals |
void |
add(TimeScheduler.Task t,
boolean relative)
Add a task for execution at adjustable intervals |
void |
start()
Start the scheduler, if it's suspended or stopped |
void |
stop()
Stop the scheduler if it's running. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public TimeScheduler(long suspend_interval)
suspend_interval
- the time that the scheduler will wait for
at least one task to be placed in the task queue before suspending
the scheduling threadpublic TimeScheduler()
Method Detail |
public void add(TimeScheduler.Task t, boolean relative)
task
- the task to executerelative
- scheduling scheme:
true:
Task is rescheduled relative to the last time it actually
started execution
false:
Task is scheduled relative to its last execution schedule. This
has the effect that the time between two consecutive executions of
the task remains the same.
public void add(TimeScheduler.Task t)
task
- the task to executepublic void start()
public void stop() throws java.lang.InterruptedException
java.lang.InterruptedException
- if interrupted while waiting for thread
to return
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |