public abstract class CyclicTimeout extends Object implements Destroyable
An abstract implementation of a timeout.
Subclasses should implement onTimeoutExpired()
.
This implementation is optimised assuming that the timeout will mostly be cancelled and then reused with a similar value.
This implementation has a Timeout
holding the time
at which the scheduled task should fire, and a linked list of
Wakeup
, each holding the actual scheduled task.
Calling schedule(long, TimeUnit)
the first time will
create a Timeout with an associated Wakeup and submit a task to
the scheduler.
Calling schedule(long, TimeUnit)
again with the same or
a larger delay will cancel the previous Timeout, but keep the
previous Wakeup without submitting a new task to the scheduler,
therefore reducing the pressure on the scheduler and avoid it
becomes a bottleneck.
When the Wakeup task fires, it will see that the Timeout is now
in the future and will attach a new Wakeup with the future time
to the Timeout, and submit a scheduler task for the new Wakeup.
Constructor and Description |
---|
CyclicTimeout(Scheduler scheduler) |
Modifier and Type | Method and Description |
---|---|
boolean |
cancel()
Cancels this CyclicTimeout so that it won't expire.
|
void |
destroy()
Destroys this CyclicTimeout.
|
Scheduler |
getScheduler() |
abstract void |
onTimeoutExpired()
Invoked when the timeout expires.
|
boolean |
schedule(long delay,
TimeUnit units)
Schedules a timeout, even if already set, cancelled or expired.
|
public CyclicTimeout(Scheduler scheduler)
scheduler
- A scheduler used to schedule wakeupspublic Scheduler getScheduler()
public boolean schedule(long delay, TimeUnit units)
Schedules a timeout, even if already set, cancelled or expired.
If a timeout is already set, it will be cancelled and replaced by the new one.
delay
- The period of time before the timeout expires.units
- The unit of time of the period.public boolean cancel()
Cancels this CyclicTimeout so that it won't expire.
After being cancelled, this CyclicTimeout can be scheduled again.
destroy()
public abstract void onTimeoutExpired()
Invoked when the timeout expires.
public void destroy()
Destroys this CyclicTimeout.
After being destroyed, this CyclicTimeout is not used anymore.
destroy
in interface Destroyable
Copyright © 2010 - 2020 Adobe. All Rights Reserved