org.springframework.util

## Class StopWatch

- java.lang.Object
- - org.springframework.util.StopWatch

-     public class StopWatch
      extends Object

  Simple stop watch, allowing for timing of a number of tasks, exposing total running time and running time for each named task.

  Conceals use of `System.currentTimeMillis()`, improving the readability of application code and reducing the likelihood of calculation errors.

  Note that this object is not designed to be thread-safe and does not use synchronization.

  This class is normally used to verify performance during proof-of-concepts and in development, rather than as part of production applications.

  Since:
    May 2, 2001
  Author:
    Rod Johnson, Juergen Hoeller, Sam Brannen

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `StopWatch.TaskInfo` Inner class to hold data about one task executed within the stop watch.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `StopWatch()` Construct a new stop watch.
    `StopWatch(String id)` Construct a new stop watch with the given id.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `StopWatch.TaskInfo` | `getLastTaskInfo()` Return the last task as a TaskInfo object.
    `String` | `getLastTaskName()` Return the name of the last task.
    `long` | `getLastTaskTimeMillis()` Return the time taken by the last task.
    `int` | `getTaskCount()` Return the number of tasks timed.
    `StopWatch.TaskInfo[]` | `getTaskInfo()` Return an array of the data for tasks performed.
    `long` | `getTotalTimeMillis()` Return the total time in milliseconds for all tasks.
    `double` | `getTotalTimeSeconds()` Return the total time in seconds for all tasks.
    `boolean` | `isRunning()` Return whether the stop watch is currently running.
    `String` | `prettyPrint()` Return a string with a table describing all tasks performed.
    `void` | `setKeepTaskList(boolean keepTaskList)` Determine whether the TaskInfo array is built over time.
    `String` | `shortSummary()` Return a short description of the total running time.
    `void` | `start()` Start an unnamed task.
    `void` | `start(String taskName)` Start a named task.
    `void` | `stop()` Stop the current task.
    `String` | `toString()` Return an informative string describing all tasks performed For custom reporting, call `getTaskInfo()` and use the task info directly.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### StopWatch

          public StopWatch()

      Construct a new stop watch. Does not start any task.

    - #### StopWatch

          public StopWatch(String id)

      Construct a new stop watch with the given id. Does not start any task.
      Parameters:
        `id` - identifier for this stop watch. Handy when we have output from multiple stop watches and need to distinguish between them.

  - ### Method Detail

    - #### setKeepTaskList

          public void setKeepTaskList(boolean keepTaskList)

      Determine whether the TaskInfo array is built over time. Set this to "false" when using a StopWatch for millions of intervals, or the task info structure will consume excessive memory. Default is "true".

    - #### start

          public void start()
                     throws IllegalStateException

      Start an unnamed task. The results are undefined if `stop()` or timing methods are called without invoking this method.
      Throws:
        `IllegalStateException`
      See Also:
        `stop()`

    - #### start

          public void start(String taskName)
                     throws IllegalStateException

      Start a named task. The results are undefined if `stop()` or timing methods are called without invoking this method.
      Parameters:
        `taskName` - the name of the task to start
      Throws:
        `IllegalStateException`
      See Also:
        `stop()`

    - #### stop

          public void stop()
                    throws IllegalStateException

      Stop the current task. The results are undefined if timing methods are called without invoking at least one pair `start()` / `stop()` methods.
      Throws:
        `IllegalStateException`
      See Also:
        `start()`

    - #### isRunning

          public boolean isRunning()

      Return whether the stop watch is currently running.

    - #### getLastTaskTimeMillis

          public long getLastTaskTimeMillis()
                                     throws IllegalStateException

      Return the time taken by the last task.
      Throws:
        `IllegalStateException`

    - #### getLastTaskName

          public String getLastTaskName()
                                 throws IllegalStateException

      Return the name of the last task.
      Throws:
        `IllegalStateException`

    - #### getLastTaskInfo

          public StopWatch.TaskInfo getLastTaskInfo()
                                             throws IllegalStateException

      Return the last task as a TaskInfo object.
      Throws:
        `IllegalStateException`

    - #### getTotalTimeMillis

          public long getTotalTimeMillis()

      Return the total time in milliseconds for all tasks.

    - #### getTotalTimeSeconds

          public double getTotalTimeSeconds()

      Return the total time in seconds for all tasks.

    - #### getTaskCount

          public int getTaskCount()

      Return the number of tasks timed.

    - #### getTaskInfo

          public StopWatch.TaskInfo[] getTaskInfo()

      Return an array of the data for tasks performed.

    - #### shortSummary

          public String shortSummary()

      Return a short description of the total running time.

    - #### prettyPrint

          public String prettyPrint()

      Return a string with a table describing all tasks performed. For custom reporting, call getTaskInfo() and use the task info directly.

    - #### toString

          public String toString()

      Return an informative string describing all tasks performed For custom reporting, call `getTaskInfo()` and use the task info directly.
      Overrides:
        `toString` in class `Object`