Java 定时循环运行程序

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

 

例如代码:

 1 public class ScheduledRunnableTest extends TimerTask {

 2     public void run() {

 3         try {

 4             Thread.sleep(2000);

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

 6         } catch (InterruptedException e) {

 7             e.printStackTrace();

 8         }

 9     }

10 

11     public static void main(String[] args) {

12         Timer timer = new Timer();

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

14     }

15 }

运行结果为:

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

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

 1 public class ScehduledThreadTest extends Thread{

 2     public void run() {

 3         try {

 4             Thread.sleep(2000);

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

 6         } catch (InterruptedException e) {

 7             e.printStackTrace();

 8         }

 9     }

10 

11     public static void main(String[] args) {

12         Timer timer = new Timer();

13         timer.scheduleAtFixedRate(new TimerTask() {

14                                             public void run() {

15                                                 new ScehduledThreadTest().start();

16                                             }

17                                         }, 

18                                     0, 1000);

19     }

20 }

这样的结果就是:

2014-07-31 13:15:10.652

2014-07-31 13:15:11.652

2014-07-31 13:15:12.652

 

 

 

你可能感兴趣的:(java)