/*********************************************************************
* Used for timing events with millisecond precision.
*
* @version 2001-07-03
* @since 2001-07-03
* @author David Wallace Croft
*********************************************************************/
public final class Stopwatch
// ////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////
{
private long elapsedTime;
private boolean isTicking;
private long startTime;
// ////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////
/*********************************************************************
* Returns the elapsed time in milliseconds.
*********************************************************************/
public synchronized long getElapsedTime()
// ////////////////////////////////////////////////////////////////////
{
if (isTicking) {
return System.currentTimeMillis() - startTime;
} else {
return elapsedTime;
}
}
// ////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////
public synchronized void reset()
// ////////////////////////////////////////////////////////////////////
{
elapsedTime = 0;
isTicking = false;
}
public synchronized void start()
// ////////////////////////////////////////////////////////////////////
{
if (isTicking) {
throw new IllegalStateException("already started");
}
isTicking = true;
startTime = System.currentTimeMillis();
}
public synchronized void stop()
// ////////////////////////////////////////////////////////////////////
{
if (!isTicking) {
throw new IllegalStateException("not started");
}
elapsedTime = System.currentTimeMillis() - startTime;
isTicking = false;
}
// ////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////
}