net.sourceforge.jtds.util
Class TimerThread

java.lang.Object
  extended byjava.lang.Thread
      extended bynet.sourceforge.jtds.util.TimerThread
All Implemented Interfaces:
java.lang.Runnable

public class TimerThread
extends java.lang.Thread

Simple timer class used to implement login and query timeouts.

This thread runs as a Daemon thread to ensure that the java VM will exit correctly when normal execution is complete.

It provides both a singleton implementation and a default constructor for the case when more than one timer thread is desired.

Version:
$Id: TimerThread.java,v 1.5.2.3 2010-05-17 09:16:06 ickzon Exp $
Author:
Alin Sinpalean, Mike Hutchinson

Nested Class Summary
static interface TimerThread.TimerListener
          Interface to be implemented by classes that request timer services.
private static class TimerThread.TimerRequest
          Internal class associating a login or query timeout value with a target TimerListener.
 
Field Summary
private static TimerThread instance
          Singleton instance.
private  long nextTimeout
          Time when the first request time out should occur.
private  java.util.LinkedList timerList
          List of TimerRequests to execute, ordered by time.
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
TimerThread()
          Construct a new TimerThread instance.
 
Method Summary
 boolean cancelTimer(java.lang.Object handle)
          Remove a redundant timer before it expires.
static TimerThread getInstance()
          Singleton getter.
 boolean hasExpired(java.lang.Object handle)
          Check whether a timer has expired.
 void run()
          Execute the TimerThread main loop.
 java.lang.Object setTimer(int timeout, TimerThread.TimerListener l)
          Add a timer request to the queue.
static void stopTimer()
          Completely stops the timer and its underlying Java thread, discarding all pending timeouts.
private  void updateNextTimeout()
          Internal method that updates the value of nextTimeout.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

instance

private static TimerThread instance
Singleton instance.


timerList

private final java.util.LinkedList timerList
List of TimerRequests to execute, ordered by time.


nextTimeout

private long nextTimeout
Time when the first request time out should occur.

Constructor Detail

TimerThread

public TimerThread()
Construct a new TimerThread instance.

Method Detail

getInstance

public static TimerThread getInstance()
Singleton getter.


run

public void run()
Execute the TimerThread main loop.


setTimer

public java.lang.Object setTimer(int timeout,
                                 TimerThread.TimerListener l)
Add a timer request to the queue.

The queue is ordered by time so that the head of the list is always the first timer to expire.

Parameters:
timeout - the interval in milliseconds after which the timer will expire
l - TimerListener to be notified on timeout
Returns:
a handle to the timer request, that can later be used with cancelTimer

cancelTimer

public boolean cancelTimer(java.lang.Object handle)
Remove a redundant timer before it expires.

Parameters:
handle - handle to the request to be removed from the queue (a TimerRequest instance)
Returns:
true if timer had not expired

stopTimer

public static void stopTimer()
Completely stops the timer and its underlying Java thread, discarding all pending timeouts. Any subsequent invocation of getInstance() will restart the timer.


hasExpired

public boolean hasExpired(java.lang.Object handle)
Check whether a timer has expired.

Parameters:
handle - handle to the request to be checked for expiry (a TimerRequest instance)
Returns:
true if timer has expired

updateNextTimeout

private void updateNextTimeout()
Internal method that updates the value of nextTimeout.



Generated on October 27 2012