Java tutorial
/** * 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; } }