首页 > 代码库 > Java 定时循环运行程序

Java 定时循环运行程序

Timer 和 ScheduledExecutorSeruvce 都能执行定时的循环任务,有函数 scheduleAtFixedRate。但是,如果任务运行时间较长,超过了一个周期时长,下一个任务就会被延缓执行。

 

例如代码:

public class ScheduledRunnableTest extends TimerTask {

public void run() {

try {

Thread.sleep(2000);

System.out.println(new Timestamp(System.currentTimeMillis()).toString());

} catch (InterruptedException e) {

e.printStackTrace();

}

}

 

public static void main(String[] args) {

Timer timer = new Timer();

timer.scheduleAtFixedRate(new ScheduledRunnableTest(), 0, 1000);

}

}

运行结果为:

2014-07-31 13:12:30.002

2014-07-31 13:12:32.006

2014-07-31 13:12:34.006

2014-07-31 13:12:36.008

 

 

并不是希望的每秒运行一次。所以得重开线程执行,代码如下:

public class ScehduledThreadTest extends Thread{

public void run() {

try {

Thread.sleep(2000);

System.out.println(new Timestamp(System.currentTimeMillis()).toString());

} catch (InterruptedException e) {

e.printStackTrace();

}

}

 

public static void main(String[] args) {

Timer timer = new Timer();

timer.scheduleAtFixedRate(new TimerTask() {

public void run() {

new ScehduledThreadTest().start();

}

}, 

0, 1000);

}

}

这样的结果就是:

2014-07-31 13:15:10.652

2014-07-31 13:15:11.652

2014-07-31 13:15:12.652