Class CyclicTimeout

  • All Implemented Interfaces:
    Destroyable
    Direct Known Subclasses:
    TimeoutCompleteListener

    @Deprecated(since="2021-05-27")
    public abstract class CyclicTimeout
    extends Object
    implements Destroyable
    Deprecated.
    The Eclipse Jetty and Apache Felix Http Jetty packages are no longer supported.

    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.

    The typical scenario to use this class is when you have events that postpone (by re-scheduling), or cancel then re-schedule, a timeout for a single entity. For example: connection idleness, where for each connection there is a CyclicTimeout and a read/write postpones the timeout; when the timeout expires, the implementation checks against a timestamp if the connection is really idle. Another example: HTTP session expiration, where for each HTTP session there is a CyclicTimeout and at the beginning of the request processing the timeout is canceled (via cancel()), but at the end of the request processing the timeout is re-scheduled.

    This implementation has a CyclicTimeout.Timeout holding the time at which the scheduled task should fire, and a linked list of CyclicTimeout.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.

    See Also:
    CyclicTimeouts
    • Constructor Detail

      • CyclicTimeout

        public CyclicTimeout​(Scheduler scheduler)
        Deprecated.
        Parameters:
        scheduler - A scheduler used to schedule wakeups
    • Method Detail

      • getScheduler

        public Scheduler getScheduler()
        Deprecated.
      • schedule

        public boolean schedule​(long delay,
                                TimeUnit units)
        Deprecated.

        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.

        Parameters:
        delay - The period of time before the timeout expires.
        units - The unit of time of the period.
        Returns:
        true if the timeout was already set.
      • cancel

        public boolean cancel()
        Deprecated.

        Cancels this CyclicTimeout so that it won't expire.

        After being cancelled, this CyclicTimeout can be scheduled again.

        Returns:
        true if this CyclicTimeout was scheduled to expire
        See Also:
        destroy()
      • onTimeoutExpired

        public abstract void onTimeoutExpired()
        Deprecated.

        Invoked when the timeout expires.

      • destroy

        public void destroy()
        Deprecated.

        Destroys this CyclicTimeout.

        After being destroyed, this CyclicTimeout is not used anymore.

        Specified by:
        destroy in interface Destroyable