org.jgroups.util

Class TimeScheduler

public class TimeScheduler extends Object

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.

Nested Class Summary
interfaceTimeScheduler.CancellableTask
interfaceTimeScheduler.Task
The interface that submitted tasks must implement
Field Summary
protected static Loglog
Constructor Summary
TimeScheduler(long suspend_interval)
Create a scheduler that executes tasks in dynamically adjustable intervals
TimeScheduler()
Create a scheduler that executes tasks in dynamically adjustable intervals
Method Summary
voidadd(TimeScheduler.Task t, boolean relative)
Add a task for execution at adjustable intervals
voidadd(TimeScheduler.Task t)
Add a task for execution at adjustable intervals
StringdumpTaskQueue()
longgetSuspendInterval()
voidsetSuspendInterval(long s)
intsize()
Answers the number of tasks currently in the queue.
voidstart()
Start the scheduler, if it's suspended or stopped
voidstop()
Stop the scheduler if it's running.

Field Detail

log

protected static final Log log

Constructor Detail

TimeScheduler

public TimeScheduler(long suspend_interval)
Create a scheduler that executes tasks in dynamically adjustable intervals

Parameters: 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 thread

TimeScheduler

public TimeScheduler()
Create a scheduler that executes tasks in dynamically adjustable intervals

Method Detail

add

public void add(TimeScheduler.Task t, boolean relative)
Add a task for execution at adjustable intervals

Parameters: t the task to execute relative 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.

add

public void add(TimeScheduler.Task t)
Add a task for execution at adjustable intervals

Parameters: t the task to execute

dumpTaskQueue

public String dumpTaskQueue()

getSuspendInterval

public long getSuspendInterval()

setSuspendInterval

public void setSuspendInterval(long s)

size

public int size()
Answers the number of tasks currently in the queue.

Returns: The number of tasks currently in the queue.

start

public void start()
Start the scheduler, if it's suspended or stopped

stop

public void stop()
Stop the scheduler if it's running. Switch to stopped, if it's suspended. Clear the task queue.

Throws: InterruptedException if interrupted while waiting for thread to return

Copyright ? 1998-2005 Bela Ban. All Rights Reserved.