Java中的计时器,时差问题

时间:2010-05-15 05:36:27

标签: java multithreading timer

我想为我的应用创建一个计时器。 示例代码如下所示。 当调用方法datetwo()时,以毫秒为单位显示在main方法中。请帮我解决这个问题

import java.util.Date;
import java.util.Timer;

public class TimerChe {
    Timer timer;
    static Date date = new Date();
    static Date date2 = new Date();

    public static void timerMethod(){
        new Thread() {
            public void run() {
                try {
                    while (true) {
                        sleep(10000);
                        datetwo();
                    }
                } catch (InterruptedException ex) {
                }
            }
        }.start();
    }

    public static void datetwo() {
        System.out.println ("OK, It's time to do something!") ;
        System.out.println("The Time is " + date2.getTime() + " milliseconds since 1970/01/01");
    }

    public static void main(String args[]) throws Exception {
        System.out.println("The Time is " + date.getTime() + " milliseconds since 1970/01/01" );   
        System.out.println ("Schedule something to do in the mean time.") ;
        timerMethod();
    } 
}

2 个答案:

答案 0 :(得分:3)

相同的时刻创建两个Date,上面有static个变量。

最好按date.getTime()date2.getTime()替换new Date().getTime()System.currentTimeMillis()。然后它将打印实际时间。

答案 1 :(得分:1)

即使System.currentTimeMillis()也是毫秒级的粒度,它的一致性取决于jvm的实现(除了其他因素)。我的建议是使用System.nanoTime(),虽然你可能会产生一些性能损失。