2013-02-26 47 views
0

我需要每X秒执行一次任务。
我知道我可以使用TimerTaskScheduledThreadPool但我的问题是这个任务取决于状态。
I.e.运行B的任务将执行的操作取决于运行结果A
什么是最好的方法来编码?
这样做也许是根据前次运行的结果安排定期任务

while(true){ 
    //do stuff 
    Thread.sleep(5000); 
} 

是我可以在这里做的最好?

回答

2

在TimerTask的实现只是定义你的状态,然后使用Timer

TimerTask task = new TimerTask() 
{ 
    private int state = 0; 

    @Override 
    public void run() 
    { 
     System.out.println ("State is: " + state); 
     state += 1; 
    } 
}; 

new Timer().schedule (task, 0L, 1000L); 

这将运行任务的每一秒(每1000L毫秒),直到永远。

+0

我需要每X秒运行一次“永远” – Jim 2013-02-26 12:28:55

+0

所以它只是总是调用'run'它不会重新创建可运行的? – Jim 2013-02-26 12:29:39

+0

@Jim在我的例子中'run'永远在每个'TimerTask'的同一个实例上被调用。只是跑步,看看。 – 2013-02-26 12:31:54

1

我想你可以使用一个TimerTimerTask

Timer timer = new Timer(); 
TimerTask task = new TimerTask() { 
    @Override 
    public void run() { 
     // Some task 
    } 
}; 
timer.schedule(task, 10000, 10000); 

它运行task10s10s初始第一时间延迟之后开始。

作为每Timer.schedule的文档,这种方法

安排指定的任务进行重复的固定延迟执行,在指定的延迟后 开始。随后的执行以大约固定的时间间隔进行 ,由指定的时间段隔开。

相关问题