【Java多线程与并发库】2.传统定时器技术回顾

来源:互联网 发布:上海前锦网络信息技术 编辑:程序博客网 时间:2024/06/05 08:53
Java中的Timer类(java.util.Timer),是最常用的定时类,它可以在隔一段时间之后
再去执行其run方法中设置的代码语句。

使用Timer类定时执行程序有三种方法:
(1)单次定时
new Timer().schedule(task, time);
给Timer类的schedule方法中传入一个TimerTask对象,并重写Task对象的run方法,

将需要定时执行的方法放入其中,然后给schedule方法设置执行时间time(隔几秒执行)。

  1. package cn.edu.hpu.test;  
  2.   
  3. import java.util.Timer;  
  4. import java.util.TimerTask;  
  5.   
  6. public class ThreadTests {  
  7.   
  8.     public static void main(String[] args) {  
  9.         new Timer().schedule(new TimerTask(){  
  10.             @Override  
  11.             public void run() {  
  12.                 System.out.println("Timer Running...");  
  13.             }  
  14.         },1000);  
  15.     }  
  16. }  

(2)循环定时
new Timer().schedule(task, firstTime, period);
给Timer类的schedule方法中传入一个TimerTask对象,并重写Task对象的run方法,
将需要定时执行的方法放入其中,然后给schedule方法设置首次执行时间time(隔几秒执行),
循环执行时间period(每多少秒执行一次)。

  1. package cn.edu.hpu.test;  
  2.   
  3. import java.util.Timer;  
  4. import java.util.TimerTask;  
  5.   
  6. public class ThreadTests {  
  7.   
  8.     public static void main(String[] args) {  
  9.         new Timer().schedule(new TimerTask(){  
  10.             @Override  
  11.             public void run() {  
  12.                 System.out.println("Timer Running...");  
  13.             }  
  14.         },1000);  
  15.         new Timer().schedule(new TimerTask(){  
  16.             @Override  
  17.             public void run() {  
  18.                 System.out.println("Timer Running..."+System.currentTimeMillis());  
  19.             }  
  20.         },1000,2000);  
  21.     }  
  22. }  


执行之后
Timer Running...1474617078660
Timer Running...
Timer Running...1474617080667
Timer Running...1474617082670
Timer Running...1474617084674
Timer Running...1474617086678

第一个定时器只执行了一次就结束了,而后面的一秒后每隔两秒就执行一次。

(3)循环定时的递归实现
我们可以编写一个继承TimerTask的子类,来在run中编写要执行的方法,然后我们在
run方法中继续调用run方法,实现递归定时执行,也就是变相的循环定时:

  1. package cn.edu.hpu.test;  
  2.   
  3. import java.util.Timer;  
  4. import java.util.TimerTask;  
  5.   
  6. public class ThreadTests {  
  7.   
  8.     public static void main(String[] args) {  
  9.         new Timer().schedule(new TimerTask(){  
  10.             @Override  
  11.             public void run() {  
  12.                 System.out.println("Timer Running...");  
  13.             }  
  14.         },1000);  
  15.           
  16.         new Timer().schedule(new MyTimerTask(),2000);  
  17.     }  
  18. }  
  19. class MyTimerTask extends TimerTask{  
  20.     @Override  
  21.     public void run() {  
  22.         System.out.println("MyTimer Running..."+System.currentTimeMillis());  
  23.         new Timer().schedule(new MyTimerTask(),2000);  
  24.     }  
  25. }  
执行之后
Timer Running...
MyTimer Running...1474617452607
MyTimer Running...1474617454613
MyTimer Running...1474617456617
MyTimer Running...1474617458620
MyTimer Running...1474617460626

第一个定时器只执行了一次就结束了,而后面的一秒后每隔两秒就执行一次。

出处:http://blog.csdn.net/acmman/article/details/52639319
0 0
原创粉丝点击