In contrast, wall time is a reading of "now" as given by a method like
System#currentTimeMillis(), best represented as an java.. Such values
can be subtracted to obtain a Duration (such as by Duration.between), but
doing so does not give a reliable measurement of elapsed time, because wall time readings
are inherently approximate, routinely affected by periodic clock corrections. Because this class
(by default) uses System#nanoTime, it is unaffected by these changes.
Use this class instead of direct calls to System#nanoTime for two reasons:
long values returned by nanoTime are meaningless and unsafe to use
in any other way than how Stopwatch uses them.
The one downside of Stopwatch relative to System#nanoTime() is that Stopwatch requires object allocation and additional method calls, which can reduce the accuracy
of the elapsed times reported. Stopwatch is still suitable for logging and metrics where
reasonably accurate values are sufficient. If the uncommon case that you need to maximize
accuracy, use System.nanoTime() directly instead.
Basic usage:
Stopwatch stopwatch = Stopwatch.createStarted();
doSomething();
stopwatch.stop(); // optional
Duration duration = stopwatch.elapsed();
log.info("time: " + stopwatch); // formatted string like "12.3 ms"
The state-changing 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.
Warning for Android users: a stopwatch with default behavior may not continue to keep time while the device is asleep. Instead, create one like this:
Stopwatch.createStarted(
new Ticker() {
public long read() {
return android.os.SystemClock.elapsedRealtimeNanos(); // requires API Level 17
}
});
| Modifier and Type | Field and Description |
|---|---|
| private long | |
| private boolean | |
| private long | |
| private final Ticker |
| Access | Constructor and Description |
|---|---|
| pack-priv | |
| pack-priv |
| Modifier and Type | Method and Description |
|---|---|
| private static String | |
| private static TimeUnit | |
| public static Stopwatch | |
| public static Stopwatch | |
| public static Stopwatch | createUnstarted()
Creates (but does not start) a new stopwatch using |
| public static Stopwatch | createUnstarted(Ticker ticker)
Creates (but does not start) a new stopwatch, using the specified time source. |
| public long | |
| public Duration | |
| private long | |
| public boolean | |
| public Stopwatch | Returns: thisStopwatch instanceSets the elapsed time for this stopwatch to zero, and places it in a stopped state. |
| public Stopwatch | |
| public Stopwatch | |
| public String | toString()
Overrides java. |
| elapsedNanos | back to summary |
|---|---|
| private long elapsedNanos | |
| isRunning | back to summary |
|---|---|
| private boolean isRunning | |
| startTick | back to summary |
|---|---|
| private long startTick | |
| ticker | back to summary |
|---|---|
| private final Ticker ticker | |
| Stopwatch | back to summary |
|---|---|
| pack-priv Stopwatch() | |
| Stopwatch | back to summary |
|---|---|
| pack-priv Stopwatch(Ticker ticker) | |
| abbreviate | back to summary |
|---|---|
| private static String abbreviate(TimeUnit unit) | |
| chooseUnit | back to summary |
|---|---|
| private static TimeUnit chooseUnit(long nanos) | |
| createStarted | back to summary |
|---|---|
| public static Stopwatch createStarted() Creates (and starts) a new stopwatch using
| |
| createStarted | back to summary |
|---|---|
| public static Stopwatch createStarted(Ticker ticker) Creates (and starts) a new stopwatch, using the specified time source.
| |
| createUnstarted | back to summary |
|---|---|
| public static Stopwatch createUnstarted() Creates (but does not start) a new stopwatch using
| |
| createUnstarted | back to summary |
|---|---|
| public static Stopwatch createUnstarted(Ticker ticker) Creates (but does not start) a new stopwatch, using the specified time source.
| |
| elapsed | back to summary |
|---|---|
| public long elapsed(TimeUnit desiredUnit) 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 It is generally not a good idea to use an ambiguous, unitless
| |
| elapsed | back to summary |
|---|---|
| public Duration elapsed() Returns the current elapsed time shown on this stopwatch as a
| |
| elapsedNanos | back to summary |
|---|---|
| private long elapsedNanos() | |
| isRunning | back to summary |
|---|---|
| public boolean isRunning() Returns | |
| reset | back to summary |
|---|---|
| public Stopwatch reset() Sets the elapsed time for this stopwatch to zero, and places it in a stopped state.
| |
| start | back to summary |
|---|---|
| public Stopwatch start() Starts the stopwatch.
| |
| stop | back to summary |
|---|---|
| public Stopwatch stop() Stops the stopwatch. Future reads will return the fixed duration that had elapsed up to this point.
| |
| toString | back to summary |
|---|---|
| public String toString() Overrides java. Returns a string representation of the current elapsed time.
| |