Class CyclicTimeouts<T extends CyclicTimeouts.Expirable>

  • Type Parameters:
    T - the CyclicTimeouts.Expirable entity type
    All Implemented Interfaces:

    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:

    When the iteration is complete, this instance is re-scheduled with the earliest expiration time calculated during the iteration.

    See Also:
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static interface  CyclicTimeouts.Expirable
      An entity that may expire.
    • 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.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • CyclicTimeouts

        public CyclicTimeouts​(Scheduler scheduler)
    • Method Detail

      • iterator

        protected abstract java.util.Iterator<T> iterator()
        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.

        expirable - the entity that is expired
        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.

        expirable - the new entity to manage the timeout for