I have this simple test:
import java.util.Timer;
import java.util.TimerTask;
public class ScheduleTest {
private static long last;
public static void main(String[] args) {
last = System.currentTimeMillis();
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Long current = System.currentTimeMillis();
System.out.println(current - last);
last = current;
}
}, 0, 1000);
}
}
which give me expected result:
0
1000
1000
1000
If I replace Timer by a ScheduleThreadPoool, it gives me weird result:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduleTest {
private static long last;
public static void main(String[] args) {
last = System.currentTimeMillis();
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(1);
last = System.currentTimeMillis();
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
Long current = System.currentTimeMillis();
System.out.println(current - last);
last = current;
}
}, 0, 1000, TimeUnit.MILLISECONDS);
}
}
Result:
0 2359 2079 2312 1844 2266
Any expectation?