在TimerTask的run()方法里使用sleep()方法后出现的奇怪想象
有这样一个小程序
01 import java.util.*;
02 public class Test extends TimerTask {
03
04 public void run() {
05 System.out.println("run... start->" + new Timestamp(System.currentTimeMillis()));
06 try {
07 Thread.sleep(10);
08 } catch (Exception e) {
09 System.out.println(e.getMessage());
10 }
11 System.out.println("run... end ->" + new Timestamp(System.currentTimeMillis()));
12 System.out.println("");
13 }
14
15 public static void main(String[] args) {
16 try {
17 Timer t = new Timer();
18 t.schedule(new Test(), 0, 1000);
19
20 } catch (Exception e) {
21 e.printStackTrace();
22 } finally {
23
24 }
25
26 }
27 }
大致的功能就是每隔1秒执行一下run(),输出一些log,但是当我在run()方法里使用了Thread.sleep()后发现刚开始执行的一次时间间隔好像不对(间隔时间长了),而且我只sleep 10ms,但是从log看每次都sleep 16ms,log如下:
run... start->2005-12-05 11:36:17.375
run... end ->2005-12-05 11:36:17.406
run... start->2005-12-05 11:36:18.39
run... end ->2005-12-05 11:36:18.406
run... start->2005-12-05 11:36:19.39
run... end ->2005-12-05 11:36:19.406
run... start->2005-12-05 11:36:20.39
run... end ->2005-12-05 11:36:20.406
如果我把第6-10行注释了,执行间隔时间就完全正常了,log如下:
run... start->2005-12-05 11:35:41.5
run... end ->2005-12-05 11:35:41.5
run... start->2005-12-05 11:35:42.5
run... end ->2005-12-05 11:35:42.5
run... start->2005-12-05 11:35:43.5
run... end ->2005-12-05 11:35:43.5
run... start->2005-12-05 11:35:44.5
run... end ->2005-12-05 11:35:44.5
我实在不明白TimerTask的run()里面使用sleep()后出现的现象,哪位大虾知道原因?