HRTimer is a simple system-wide timer facility using a singleton Timer, with additional instrumentation.
/** * Copyright (c) 2006 Richard Rodgers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //package com.monad.homerun.util; import java.util.Timer; import java.util.TimerTask; /** * HRTimer is a simple system-wide timer facility using a singleton Timer, * with additional instrumentation. */ public class HRTimer { // the singleton instance private static HRTimer instance = null; // the timer instance private Timer hrTimer = null; // task counters private int numRepeatTasks = 0; private int numOneOffTasks = 0; // private constructor private HRTimer() { hrTimer = new Timer( true ); } /** * Resturns an instance of an HRTimer * * @return timer * the timer instance */ public static synchronized HRTimer getInstance() { if ( instance == null ) { instance = new HRTimer(); } return instance; } /** * Adds a repeating task to the timer * * @param task * the timer task to add * @param period * the time interval between task executions */ public void addTask( TimerTask task, long period ) { ++numRepeatTasks; hrTimer.schedule( task, 0L, period ); } /** * Adds a task to be executed only once * * @param task * the task to perform * @param delay * initial time interval before execution */ public void addOneOffTask( TimerTask task, long delay ) { ++numOneOffTasks; hrTimer.schedule( task, delay ); } /** * Adds a repeating task with an initial delay * * @param task * the task to add * @param delay * the intial delay before first execution * @param period * the interval between task executions */ public void addDelayedTask( TimerTask task, long delay, long period ) { ++numRepeatTasks; hrTimer.schedule( task, delay, period ); } /** * Cancels a regsitered task * * @param task * the task to be cancelled */ public void cancelTask( TimerTask task ) { --numRepeatTasks; task.cancel(); } /** * Returns the number of active tasks * * @return num * the number of current tasks */ public int getNumTasks() { return numRepeatTasks + numOneOffTasks; } /** * Returns the current number of repeatable tasks * * @return num * the number of repreatable tasks */ public int getNumRepeatTasks() { return numRepeatTasks; } /** * Returns the current number of non-repeatable tasks * * @return num * the number of non-repreatable tasks */ public int getNumOneOffTasks() { return numOneOffTasks; } }