Interface Clock

  • All Known Implementing Classes:
    SystemClock

    @ThreadSafe
    public interface Clock
    Interface for getting the current time.
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Default Methods 
      Modifier and Type Method Description
      static Clock getDefault()
      Returns a default Clock which reads from system time.
      long nanoTime()
      Returns a time measurement with nanosecond precision that can only be used to calculate elapsed time.
      long now()
      Returns the current epoch timestamp in nanos from this clock.
      default long now​(boolean highPrecision)
      Returns the current epoch timestamp in nanos from this clock.
    • Method Detail

      • getDefault

        static Clock getDefault()
        Returns a default Clock which reads from system time.
      • now

        long now()
        Returns the current epoch timestamp in nanos from this clock. This timestamp should only be used to compute a current time. To compute a duration, timestamps should always be obtained using nanoTime(). For example, this usage is correct.
        
         long startNanos = clock.nanoTime();
         // Spend time...
         long durationNanos = clock.nanoTime() - startNanos;
         

        This usage is NOT correct.

        
         long startNanos = clock.now();
         // Spend time...
         long durationNanos = clock.now() - startNanos;
         

        Calling this is equivalent to calling now(boolean) with highPrecision=true.

      • now

        default long now​(boolean highPrecision)
        Returns the current epoch timestamp in nanos from this clock.

        This overload of now() includes a highPrecision argument which specifies whether the implementation should attempt to resolve higher precision at the potential expense of performance. For example, in java 9+ its sometimes possible to resolve ns precision higher than the ms precision of System.currentTimeMillis(), but doing so incurs a performance penalty which some callers may wish to avoid. In contrast, we don't currently know if resolving ns precision is possible in java 8, regardless of the value of highPrecision.

        See now() javadoc for details on usage.

        Since:
        1.38.0
      • nanoTime

        long nanoTime()
        Returns a time measurement with nanosecond precision that can only be used to calculate elapsed time.