📄 timer.java
字号:
package net.sujee.javatimer;import java.util.Vector;import net.sujee.javatimer.TimerCallback;public class Timer extends Thread{ Vector mCallbacks; boolean mKeepWorking; long mNotifyTicks; public static final int DEFAULT_TICK_INTERVAL = 1000; // 1 sec public Timer () { super ("Timer thread"); mCallbacks = new Vector (); mKeepWorking = true; mNotifyTicks = DEFAULT_TICK_INTERVAL; // one Sec default start(); } public synchronized void addCallback (TimerCallback callback, long tickInterval) { if (callback != null) { Callback client = new Callback (); client.callback = callback; client.tickInterval = (tickInterval > 0) ? tickInterval : DEFAULT_TICK_INTERVAL; mCallbacks.add (client); // also modify the maximum time I should sleep if ( client.tickInterval < mNotifyTicks) mNotifyTicks = client.tickInterval; } } public synchronized void removeCallback (TimerCallback callback) { int totalCallbacks = mCallbacks.size(); for (int i=0 ; i< totalCallbacks ; ++i) { Callback c = (Callback) mCallbacks.get(i); if (c.callback == callback) { mCallbacks.remove(i); return; } } } public void stopTicking () { mKeepWorking = false; } public void run () { long lastTime = System.currentTimeMillis(); while (mKeepWorking) { synchronized (this) { if ( (System.currentTimeMillis()-lastTime) >= mNotifyTicks ) { int callbackCount = mCallbacks.size(); for (int i=0; i < callbackCount; ++i) { Callback c = (Callback) mCallbacks.get(i); long elapsedTime = System.currentTimeMillis() -c.lastNotified; if ( c.tickInterval <= elapsedTime) { c.callback.tick (); c.lastNotified = System.currentTimeMillis(); } } lastTime = System.currentTimeMillis(); } } // now sleep for a while! try { sleep (mNotifyTicks/2); } catch (InterruptedException e) { // no need to do anytihng } } }}class Callback{ long tickInterval; long lastNotified; TimerCallback callback;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -