【问题标题】:Time Schedule Error时间表错误
【发布时间】:2013-03-05 21:56:33
【问题描述】:

请看下面的代码

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();
    }


}

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

【问题讨论】:

    标签: java time timer scheduled-tasks


    【解决方案1】:

    您告诉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();
        }
    
    
    }
    

    【讨论】:

    • 非常感谢您的回复 :) +1 来自我 :)
    【解决方案3】:

    看看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);
    

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

    【讨论】:

    • 非常感谢您的回复 :) +1 来自我 :)
    【解决方案4】:

    您已将延迟设置为以毫秒为单位的当前时间(这将是一个很长的时间:))。您可能打算这样做:

    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 设置为当前日期。

    【讨论】:

    • 虽然这可行,但new Date()new Date(System.currentTimeMillis()) 的简写,无论如何最好使用0 调用。
    • 是的,new Date() 是 new Date(System.currentTimeMillis()) 的简写。我只是说清楚。
    • 感谢您的回复。来自我的 +1 :)
    猜你喜欢
    • 2020-03-14
    • 2019-08-03
    • 1970-01-01
    • 2013-01-22
    • 2013-08-28
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多