Package ej.bon

## Class TimerTask

- java.lang.Object
- - ej.bon.TimerTask

- All Implemented Interfaces:
    `Runnable`

      public abstract class TimerTask
      extends Object
      implements Runnable

  A task that can be scheduled for one-time or repeated execution by a Timer.

- - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `TimerTask()` | Creates a new timer task.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `cancel()` | Cancels this timer task.
    `abstract void` | `run()` | The action to be performed by this timer task.
    `long` | `scheduledExecutionTime()` | Returns the scheduled execution time of the most recent actual execution of this task.
    `void` | `uncaughtException​(Timer timer, Throwable e)` | Method invoked when this `TimerTask` terminates due to an uncaught exception thrown by `run()`.

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

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

- - ### Constructor Detail

    - #### TimerTask

          protected TimerTask()

      Creates a new timer task.

  - ### Method Detail

    - #### run

          public abstract void run()

      The action to be performed by this timer task.
      Specified by:
        `run` in interface `Runnable`
      See Also:
        `Thread.run()`

    - #### cancel

          public boolean cancel()

      Cancels this timer task. If the task has been scheduled for one-time execution and has not yet run, or has not yet been scheduled, it will never run. If the task has been scheduled for repeated execution, it will never run again. (If the task is running when this call occurs, the task will run to completion, but will never run again.) Note that calling this method from within the run method of a repeating timer task absolutely guarantees that the timer task will not run again. This method may be called repeatedly; the second and subsequent calls have no effect.
      Returns:
        `true` if this task is scheduled for one-time execution and has not yet run, or this task is scheduled for repeated execution. Returns `false` if the task was scheduled for one-time execution and has already run, or if the task was never scheduled, or if the task was already canceled (Loosely speaking, this method returns `true` if it prevents one or more scheduled executions from taking place.)

    - #### scheduledExecutionTime

          public long scheduledExecutionTime()

      Returns the scheduled execution time of the most recent actual execution of this task. (If this method is invoked while task execution is in progress, the return value is the scheduled execution time of the ongoing task execution.)

      This method is typically invoked from within a task's run method, to determine whether the current execution of the task is sufficiently timely to warrant performing the scheduled activity:

           public void run() {
                  if (CurrentTime.get() - scheduledExecutionTime() >= MAX_TARDINESS)
                          return; // Too late; skip this execution.
                  // Perform the task
           }

      This method is typically not used in conjunction with fixed-delay execution repeating tasks, as their scheduled execution times are allowed to drift over time, and so are not terribly significant.

      Returns:
        the time at which the most recent execution of this task was scheduled to occur, in the format returned by Date.getTime(). The return value is undefined if the task has yet to commence its first execution.
      See Also:
        `Date.getTime()`

    - #### uncaughtException

          public void uncaughtException​(Timer timer,
                                        Throwable e)

      Method invoked when this `TimerTask` terminates due to an uncaught exception thrown by `run()`.

      The default implementation of this method handles the uncaught exception as following:

      1. if the `Timer` instance has a registered handler, this handler is invoked,
      2. otherwise, if the `Timer` class has a registered default handler, this handler is invoked,
      3. otherwise, the task is canceled and `Throwable.printStackTrace()` is invoked on the given exception.

      Any exception thrown by this method will be ignored.

      Parameters:
        `timer` - The `Timer` on which this `TimerTask` is scheduled.
        `e` - The uncaught exception.
      See Also:
        `Timer.setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler)`, `Timer.setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler)`