public class Timer implements Runnable { private long lastTime; private long newTime; private long lastDiff; private long lastCount; private long count; private boolean run; private Thread process; public Timer() { this.lastCount=1; this.count=0; this.lastTime=System.currentTimeMillis(); this.newTime=System.currentTimeMillis(); this.process=new Thread(this); this.process.start(); this.process.setPriority(Thread.MAX_PRIORITY); } public void start() { } public long getTime() { if(this.lastCount==0) return 0; long predicted=this.lastTime-this.lastDiff+this.count*this.lastDiff/this.lastCount; if(predictedthis.lastTime) { this.lastCount=this.count; this.count=1; this.lastDiff=this.newTime-this.lastTime; this.lastTime=this.newTime; } else { this.count++; } } }