计时器任务和线程和内部类

时间:2013-12-07 04:14:34

标签: java multithreading timertask

大家好。我开发了以下代码。目的是:在屏幕上每500毫秒打印一次当前时间。这应该发生在一个线程内。我的代码不起作用,我不知道为什么。

====================================================================

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimer implements Runnable 
     {
      public class PrintingTask extends TimerTask
      {
           public void run()
           {
                Date CurrentTime = new Date() ; 
                System.out.println(CurrentTime) ; 
            }
       } 
      public void run()
      {
         Timer timer = new  Timer() ; 
         PrintingTask Task1 = new PrintingTask() ; 
         timer.schedule(Task1,500);
       }
      }
  //====================End of the thread : MyTimer========================
    public class Test {
       public static void main(String[] args) throws InterruptedException {
       Thread TimerOfScreen = new Thread(new MyTimer());
       TimerOfScreen.start(); 
                      }

  ======================End of the test class=====================

日期只打印一次,而不是每500毫秒打印一次。任何机构都可以修复这段代码,“没有大的逻辑变化”?

1 个答案:

答案 0 :(得分:2)

您使用的版本Timer.schedule()仅在指定的延迟后运行一次任务:Timer.schedule(TimerTask, long)

您需要指定实际重复该任务的其中一个版本:Timer.schedule(TimerTask, long, long)Timer.scheduleAtFixedRate(TimerTask, long, long)。在这两个中,第三个参数确定每次执行之间将经过多长时间。不同之处在于scheduleAtFixedRate将尝试将每个任务调用的开始保持在从开始时间起几乎恒定的时间段,而schedule将在一次执行结束与开始之间保持相当恒定的差距另一个。