ThreadMonitor (Commons IO 2.5)
Date: 2016-12-01

org.apache.commons.io

## Class ThreadMonitor

- java.lang.Object
- - org.apache.commons.io.ThreadMonitor

- All Implemented Interfaces:
    java.lang.Runnable

       class ThreadMonitor
      extends java.lang.Object
      implements java.lang.Runnable

  Monitors a thread, interrupting it if it reaches the specified timeout.

  This works by sleeping until the specified timeout amount and then interrupting the thread being monitored. If the thread being monitored completes its work before being interrupted, it should `interrupt()` the monitor thread.

             long timeoutInMillis = 1000;
             try {
                 Thread monitor = ThreadMonitor.start(timeoutInMillis);
                 // do some work here
                 ThreadMonitor.stop(monitor);
             } catch (InterruptedException e) {
                 // timed amount was reached
             }

  Version:
    $Id: ThreadMonitor.java 1718945 2015-12-09 19:51:14Z krosenvold $

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private java.lang.Thread` | `thread`
    `private long` | `timeout`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `private` | `ThreadMonitor(java.lang.Thread thread, long timeout)` Construct and new monitor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `run()` Sleep until the specified timeout amount and then interrupt the thread being monitored.
    `private static void` | `sleep(long ms)` Sleep for a guaranteed minimum number of milliseconds unless interrupted.
    `static java.lang.Thread` | `start(long timeout)` Start monitoring the current thread.
    `static java.lang.Thread` | `start(java.lang.Thread thread, long timeout)` Start monitoring the specified thread.
    `static void` | `stop(java.lang.Thread thread)` Stop monitoring the specified thread.

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

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

- - ### Field Detail

    - #### thread

          private final java.lang.Thread thread

    - #### timeout

          private final long timeout

  - ### Constructor Detail

    - #### ThreadMonitor

          private ThreadMonitor(java.lang.Thread thread,
                       long timeout)

      Construct and new monitor.
      Parameters:
        `thread` - The thread to monitor
        `timeout` - The timeout amount in milliseconds

  - ### Method Detail

    - #### start

          public static java.lang.Thread start(long timeout)

      Start monitoring the current thread.
      Parameters:
        `timeout` - The timeout amount in milliseconds or no timeout if the value is zero or less
      Returns:
        The monitor thread or `null` if the timeout amount is not greater than zero

    - #### start

          public static java.lang.Thread start(java.lang.Thread thread,
                               long timeout)

      Start monitoring the specified thread.
      Parameters:
        `thread` - The thread The thread to monitor
        `timeout` - The timeout amount in milliseconds or no timeout if the value is zero or less
      Returns:
        The monitor thread or `null` if the timeout amount is not greater than zero

    - #### stop

          public static void stop(java.lang.Thread thread)

      Stop monitoring the specified thread.
      Parameters:
        `thread` - The monitor thread, may be `null`

    - #### run

          public void run()

      Sleep until the specified timeout amount and then interrupt the thread being monitored.
      Specified by:
        `run` in interface `java.lang.Runnable`
      See Also:
        `Runnable.run()`

    - #### sleep

          private static void sleep(long ms)
                             throws java.lang.InterruptedException

      Sleep for a guaranteed minimum number of milliseconds unless interrupted. This method exists because Thread.sleep(100) can sleep for 0, 70, 100 or 200ms or anything else it deems appropriate. Read the docs on Thread.sleep for further interesting details.
      Parameters:
        `ms` - the number of milliseconds to sleep for
      Throws:
        `java.lang.InterruptedException` - if interrupted

Copyright (c) 2002-2016 Apache Software Foundation