时间表错误

时间:2013-03-17 14:41:29

标签: java time timer scheduled-tasks

请查看以下代码

public class Test {

    public Test()
    {
        Timer timer = new Timer();
        timer.schedule(new TimerTask(){
        public void run()
        {
            System.out.println("Updated");
        }
        }, System.currentTimeMillis(),1000);



    }

    public static void main(String[]args)
    {
        new Test();
    }


}

在这里,你可以看到它没有打印任何东西!换句话说,时间没有安排!这是为什么?我想安排任务在每一秒发生。请帮忙!

4 个答案:

答案 0 :(得分:6)

您告诉Timer在执行TimerTask之前等待(大约)1363531420毫秒。这可以用到约42年。您应该使用Timer.schedule(yourTask, 0, 1000)

答案 1 :(得分:2)

尝试执行此代码:

import java.util.Timer;
import java.util.TimerTask;

public class Test {

    public Test()
    {
        Timer timer = new Timer();
        timer.schedule(new TimerTask(){
        public void run()
        {
            System.out.println("Updated");
        }
        }, 0,1000);



    }

    public static void main(String[]args)
    {
        new Test();
    }


}

答案 2 :(得分:2)

看一下javadoc,有两种方法:

schedule(TimerTask task, Date firstTime, long period) 
schedule(TimerTask task, long delay, long period) 

您正在传递(TimerTask, long, long),因此正在调用第二个 - 即安排任务在System.currentTimeMillis()毫秒内第一次运行,之后每秒运行一次。因此,您的任务将首次在Thu Jun 01 06:45:28 BST 2056运行,以便找到答案:

public static void main(String[] args) {        
    System.out.println(new Date(2*System.currentTimeMillis()));
}

您需要使用零调用方法:

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        public void run() {
            System.out.println("Updated");
        }
    }, 0, 1000);

这意味着安排任务首次以零毫秒运行,之后每秒运行一次。

答案 3 :(得分:0)

您已将延迟设置为以毫秒为单位的当前时间(这将是一段很长的时间:))。你可能想要这个:

public class Test {

    public Test()
    {
        Timer timer = new Timer();
        timer.schedule(new TimerTask(){
            public void run()
            {
                System.out.println("Updated");
            }
        }, new Date(System.currentTimeMillis()),1000); //<--- Notice a date is being constructed


    }

    public static void main(String[]args)
    {
        new Test();
    }

}

将firstTime设置为当前日期。