## com.google.common.base
Class Stopwatch

    java.lang.Object
      com.google.common.base.Stopwatch

    @Beta
    @GwtCompatible(emulated=true)
    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 = new Stopwatch().start();
       doSomething();
       stopwatch.stop(); // optional

       long millis = stopwatch.elapsedMillis();

       log.info("that took: " + 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 the alternate constructor 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

Constructor Summary
`Stopwatch()` Creates (but does not start) a new stopwatch using `System.nanoTime()` as its time source.
`Stopwatch(Ticker ticker)` Creates (but does not start) a new stopwatch, using the specified time source.

Method Summary
`long` `elapsedMillis()` Returns the current elapsed time shown on this stopwatch, expressed in milliseconds, with any fraction rounded down.
`long` `elapsedTime(TimeUnit desiredUnit)` Returns the current elapsed time shown on this stopwatch, expressed in the desired time unit, with any fraction rounded down.
`boolean` `isRunning()` Returns `true` if `start()` has been called on this stopwatch, and `stop()` has not been called since the last call to `start()`.
`Stopwatch` `reset()` Sets the elapsed time for this stopwatch to zero, and places it in a stopped state.
`Stopwatch` `start()` Starts the stopwatch.
`Stopwatch` `stop()` Stops the stopwatch.
`String` `toString()` Returns a string representation of the current elapsed time.
`String` `toString(int significantDigits)` Deprecated. Use `toString()` instead. This method is scheduled to be removed in Guava release 15.0.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Constructor Detail

### Stopwatch

    public Stopwatch()

  Creates (but does not start) a new stopwatch using `System.nanoTime()` as its time source.

### Stopwatch

    public Stopwatch(Ticker ticker)

  Creates (but does not start) a new stopwatch, using the specified time source.

Method Detail

### isRunning

    public boolean isRunning()

  Returns `true` if `start()` has been called on this stopwatch, and `stop()` has not been called since the last call to `start()`.

### start

    public Stopwatch start()

  Starts the stopwatch.

  Returns:
    this `Stopwatch` instance
  Throws:
    `IllegalStateException` - if the stopwatch is already running.

### stop

    public Stopwatch stop()

  Stops the stopwatch. Future reads will return the fixed duration that had elapsed up to this point.

  Returns:
    this `Stopwatch` instance
  Throws:
    `IllegalStateException` - if the stopwatch is already stopped.

### reset

    public Stopwatch reset()

  Sets the elapsed time for this stopwatch to zero, and places it in a stopped state.

  Returns:
    this `Stopwatch` instance

### elapsedTime

    public long elapsedTime(TimeUnit desiredUnit)

  Returns the current elapsed time shown on this stopwatch, expressed in the desired time unit, with any fraction rounded down.

  Note that the overhead of measurement can be more than a microsecond, so it is generally not useful to specify `TimeUnit.NANOSECONDS` precision here.

### elapsedMillis

    public long elapsedMillis()

  Returns the current elapsed time shown on this stopwatch, expressed in milliseconds, with any fraction rounded down. This is identical to `elapsedTime(TimeUnit.MILLISECONDS`.

### toString

    @GwtIncompatible(value="String.format()")
    public String toString()

  Returns a string representation of the current elapsed time.

  Overrides:
    `toString` in class `Object`

### toString

    @Deprecated
    @GwtIncompatible(value="String.format()")
    public String toString(int significantDigits)

  Deprecated. Use `toString()` instead. This method is scheduled to be removed in Guava release 15.0.

  Returns a string representation of the current elapsed time, choosing an appropriate unit and using the specified number of significant figures. For example, at the instant when `elapsedTime(NANOSECONDS)` would return {1234567}, `toString(4)` returns `"1.235 ms"`.

Copyright © 2010-2012. All Rights Reserved.