Class 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
           }
     
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.Thread thread  
      private long timeout  
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private ThreadMonitor​(java.lang.Thread thread, long timeout)
      Construct and new monitor.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method 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