Class Stopwatch


  • public final class Stopwatch
    extends Object
    An object that measures elapsed time in nanoseconds. It is useful to measure elapsed time using this class instead of direct calls to System.nanoTime() for a few reasons:

    • An alternate time source can be substituted, for testing or performance reasons.
    • As documented by nanoTime, the value returned has no absolute meaning, and can only be interpreted as relative to another timestamp returned by nanoTime at a different time. Stopwatch is a more effective abstraction because it exposes only these relative values, not the absolute ones.

    Basic usage:

       Stopwatch stopwatch = Stopwatch.createStarted();
       doSomething();
       stopwatch.stop(); // optional
    
       long millis = stopwatch.elapsed(MILLISECONDS);
    
       log.info("time: " + stopwatch); // formatted string like "12.3 ms"

    Stopwatch methods are not idempotent; it is an error to start or stop a stopwatch that is already in the desired state.

    When testing code that uses this class, use #createUnstarted(Ticker) or #createStarted(Ticker) to supply a fake or mock ticker. This allows you to simulate any valid behavior of the stopwatch.

    Note: This class is not thread-safe.

    Since:
    10.0
    Author:
    Kevin Bourrillion
    • Method Detail

      • createUnstarted

        public static Stopwatch createUnstarted()
        Creates (but does not start) a new stopwatch using System.nanoTime() as its time source.
        Since:
        15.0
      • start

        public Stopwatch start()
        Starts the stopwatch.
        Returns:
        this Stopwatch instance
        Throws:
        IllegalStateException - if the stopwatch is already running.
      • toString

        public String toString()
        Returns a string representation of the current elapsed time.
        Overrides:
        toString in class Object