Class StopWatch
- java.lang.Object
-
- io.cui.tools.concurrent.StopWatch
-
- All Implemented Interfaces:
Serializable
public final class StopWatch extends Object implements Serializable
An object that measures elapsed time in nanoseconds. It is useful to measure elapsed time using this class instead of direct calls toSystem.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 bynanoTimeat a different time.StopWatchis 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 Duration duration = stopwatch.elapsed(); 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)orcreateStarted(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.
- Author:
- com.google.common.base.Stopwatch
- See Also:
- Serialized Form
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static StopWatchcreateStarted()static StopWatchcreateStarted(Ticker ticker)static StopWatchcreateUnstarted()static StopWatchcreateUnstarted(Ticker ticker)Durationelapsed()longelapsed(TimeUnit desiredUnit)booleanisRunning()StopWatchreset()Sets the elapsed time for this stopwatch to zero, and places it in a stopped state.StopWatchstart()Starts the stopwatch.StopWatchstop()Stops the stopwatch.StringtoString()Returns a string representation of the current elapsed time.
-
-
-
Method Detail
-
createUnstarted
public static StopWatch createUnstarted()
- Returns:
- a created (but not started) new stopwatch using
System.nanoTime()as its time source.
-
createUnstarted
public static StopWatch createUnstarted(Ticker ticker)
- Parameters:
ticker- specified time source, must not be null- Returns:
- a created (but not started) new stopwatch, using the specified time source.
-
createStarted
public static StopWatch createStarted()
- Returns:
- a created (and started) new stopwatch using
System.nanoTime()as its time source.
-
createStarted
public static StopWatch createStarted(Ticker ticker)
- Parameters:
ticker- specified time source, must not be null- Returns:
- a created (and started) new stopwatch, using the specified time source.
-
isRunning
public boolean isRunning()
-
start
public StopWatch start()
Starts the stopwatch.- Returns:
- this
StopWatchinstance - 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
StopWatchinstance - 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
StopWatchinstance
-
elapsed
public long elapsed(TimeUnit desiredUnit)
- Parameters:
desiredUnit- must not be null- Returns:
- the current elapsed time shown on this stopwatch, expressed in the desired time unit,
with any fraction rounded down.
Note: the overhead of measurement can be more than a microsecond, so it is generally not useful to specify
TimeUnit.NANOSECONDSprecision here.It is generally not a good idea to use an ambiguous, unitless
longto represent elapsed time. Therefore, we recommend usingelapsed()instead, which returns a strongly-typedDurationinstance.
-
elapsed
public Duration elapsed()
- Returns:
- the current elapsed time shown on this stopwatch as a
Duration. Unlikeelapsed(TimeUnit), this method does not lose any precision due to rounding.
-
-