2011-04-28 77 views
1

我需要使用java运行无限次的计时器,我需要让计时器每运行2秒,我该如何做?Java Timer的帮助?

+2

无限次?你会在这里一段时间! – diagonalbatman 2011-04-28 15:35:17

+0

谷歌Java定时器让你在Java中的Timer类,为什么不使用它? http://download.oracle.com/javase/1.4.2/docs/api/java/util/Timer.html – 2011-04-28 15:36:34

+0

@Roy我试图做到这一点,但我没有弄明白,我试着做:定时器timer = new Timer(2000,new TimerHandler()); ,但它给了我一个我无法修复自己的错误。 – Stan 2011-04-28 15:38:25

回答

6

您可以使用ScheduledExecutorService的

ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor(); 
ses.scheduleAtFixedRate(new Runnable() { 
    public void run() { 
     // do something. 
    } 
}, 0, 2, TimeUnit.SECONDS); 
2

您可以使用scheduleAtFixedRate()

long delay = 1000; 
long period = 2000; 
Timer timer = new Timer(); 

timer.scheduleAtFixedRate(new TimerTask() { 
     public void run() { 
      // Task here ... 
     } 
    }, delay, period); 
+0

'ScheduledExecutorService'是更好的选择。阅读[this](http://download.oracle.com/javase/6/docs/api/java/util/Timer.html#scheduleAtFixedRate%28java.util.TimerTask,%20java.util.Date,%20long%29 ),你就会知道为什么。 – mre 2011-04-28 15:47:02

+0

我不明白为什么。您能否添加一个简短的解释? – MarcoS 2011-04-28 16:00:22

+1

如果任务花费的时间超过'期限'完成,后续任务将开始排队,一旦任务完成,那些排队的任务将快速连续激发,并导致不稳定的行为。 'ScheduledExecutorService'不会发生这种情况。 – mre 2011-04-28 16:59:09

0

我以前用过quartz实现类似的功能,它一直运作良好,我。

1
public class Timer implements Runnable { 

public static void main(String args[]) { 
    Timer t = new Timer(); 
    t.run(); 
} 

public void run() { 
    while (true) { 
     //do something cool    
     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException ex) { 
      //handle interrupt 
     } 
    } 
} 

}

类似的东西?

+0

你可以使用普通的线程而不是定时器。 ;) – 2011-04-28 15:42:58