Class SleepingIdleStrategy

  • All Implemented Interfaces:
    IdleStrategy

    public final class SleepingIdleStrategy
    extends java.lang.Object
    implements IdleStrategy
    When idle this strategy is to sleep for a specified period in nanoseconds.

    This class uses LockSupport.parkNanos(long) to idle.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String ALIAS
      Name to be returned from alias().
      static long DEFAULT_SLEEP_PERIOD_NS
      Default sleep period that tends to work as the likely minimum on Linux to be effective.
      private long sleepPeriodNs  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.String alias()
      Simple name by which the strategy can be identified.
      void idle()
      Perform current idle action (e.g.
      void idle​(int workCount)
      Perform current idle action (e.g.
      void reset()
      Reset the internal state in preparation for entering an idle state again.
      java.lang.String toString()
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • DEFAULT_SLEEP_PERIOD_NS

        public static final long DEFAULT_SLEEP_PERIOD_NS
        Default sleep period that tends to work as the likely minimum on Linux to be effective.
        See Also:
        Constant Field Values
      • sleepPeriodNs

        private final long sleepPeriodNs
    • Constructor Detail

      • SleepingIdleStrategy

        public SleepingIdleStrategy​(long sleepPeriodNs)
        Constructed a new strategy that will sleep for a given period when idle.
        Parameters:
        sleepPeriodNs - period in nanosecond for which the strategy will sleep when work count is 0.
    • Method Detail

      • idle

        public void idle​(int workCount)
        Perform current idle action (e.g. nothing/yield/sleep). This method signature expects users to call into it on every work 'cycle'. The implementations may use the indication "workCount > 0" to reset internal backoff state. This method works well with 'work' APIs which follow the following rules:
        • 'work' returns a value larger than 0 when some work has been done
        • 'work' returns 0 when no work has been done
        • 'work' may return error codes which are less than 0, but which amount to no work has been done

        Callers are expected to follow this pattern:

         
         while (isRunning)
         {
             idleStrategy.idle(doWork());
         }
         
         
        Specified by:
        idle in interface IdleStrategy
        Parameters:
        workCount - performed in last duty cycle.
      • idle

        public void idle()
        Perform current idle action (e.g. nothing/yield/sleep). To be used in conjunction with IdleStrategy.reset() to clear internal state when idle period is over (or before it begins). Callers are expected to follow this pattern:
         
         while (isRunning)
         {
           if (!hasWork())
           {
             idleStrategy.reset();
             while (!hasWork())
             {
               if (!isRunning)
               {
                 return;
               }
               idleStrategy.idle();
             }
           }
           doWork();
         }
         
         
        Specified by:
        idle in interface IdleStrategy
      • reset

        public void reset()
        Reset the internal state in preparation for entering an idle state again.
        Specified by:
        reset in interface IdleStrategy
      • alias

        public java.lang.String alias()
        Simple name by which the strategy can be identified.
        Specified by:
        alias in interface IdleStrategy
        Returns:
        simple name by which the strategy can be identified.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object