Class CyclicTimeouts<T extends CyclicTimeouts.Expirable>
- java.lang.Object
-
- org.eclipse.jetty.io.CyclicTimeouts<T>
-
- Type Parameters:
T
- theCyclicTimeouts.Expirable
entity type
- All Implemented Interfaces:
Destroyable
public abstract class CyclicTimeouts<T extends CyclicTimeouts.Expirable> extends java.lang.Object implements Destroyable
An implementation of a timeout that manages many
expirable
entities whose timeouts are mostly cancelled or re-scheduled.A typical scenario is for a parent entity to manage the timeouts of many children entities.
When a new entity is created, call
schedule(Expirable)
with the new entity so that this instance can be aware and manage the timeout of the new entity.Eventually, this instance wakes up and iterates over the entities provided by
iterator()
. During the iteration, each entity:- may never expire (see
CyclicTimeouts.Expirable.getExpireNanoTime()
; the entity is ignored - may be expired;
onExpired(Expirable)
is called with that entity as parameter - may expire at a future time; the iteration records the earliest expiration time among all non-expired entities
When the iteration is complete, this instance is re-scheduled with the earliest expiration time calculated during the iteration.
- See Also:
CyclicTimeout
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
CyclicTimeouts.Expirable
An entity that may expire.
-
Constructor Summary
Constructors Constructor Description CyclicTimeouts(Scheduler scheduler)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
destroy()
protected abstract java.util.Iterator<T>
iterator()
protected abstract boolean
onExpired(T expirable)
Invoked during the iteration when the given entity is expired.void
schedule(T expirable)
Manages the timeout of a new entity.
-
-
-
Constructor Detail
-
CyclicTimeouts
public CyclicTimeouts(Scheduler scheduler)
-
-
Method Detail
-
iterator
protected abstract java.util.Iterator<T> iterator()
- Returns:
- the entities to iterate over when this instance expires
-
onExpired
protected abstract boolean onExpired(T expirable)
Invoked during the iteration when the given entity is expired.
This method may be invoked multiple times, and even concurrently, for the same expirable entity and therefore the expiration of the entity, if any, should be an idempotent action.
- Parameters:
expirable
- the entity that is expired- Returns:
- whether the entity should be removed from the iterator via
Iterator.remove()
-
schedule
public void schedule(T expirable)
Manages the timeout of a new entity.
- Parameters:
expirable
- the new entity to manage the timeout for
-
destroy
public void destroy()
- Specified by:
destroy
in interfaceDestroyable
-
-