转:定时器设计

1、传统的定时器实现

  1. package cn.itcast.thread;  
  2.   
  3. import java.util.Date;  
  4. import java.util.Timer;  
  5. import java.util.TimerTask;  
  6.   
  7. public class TraditionalTimer {  
  8.   
  9.     private static  int count = 0;  
  10.       
  11.     public static void main(String[] args) {  
  12.           
  13.         //延迟2秒执行run方法中的内容  
  14.         final Timer timer = new Timer();  
  15.         timer.schedule(new TimerTask() {  
  16.             public void run() {  
  17.                 System.out.println("haha");  
  18.             }  
  19.         }, 2000);  
  20.           
  21.         //延迟2秒执行run方法中的内容,以后每间隔一秒去执行run方法  
  22.         timer.schedule(  
  23.                 new TimerTask() {  
  24.                     public void run() {  
  25.                         System.out.println("hello java");  
  26.                     }  
  27.                 },   
  28.                 2000,  
  29.                 1000);  
  30.   
  31.         //延迟2秒执行run方法中的内容,以后根据count的值判断是间隔2秒还是4秒去执行run方法  
  32.         System.out.println(new Date().getSeconds());  
  33.         class MyTimerTask extends TimerTask {  
  34.             public void run() {  
  35.                 count ++;  
  36.                 System.out.println(new Date().getSeconds());  
  37.                 System.out.println("hello java!");  
  38.                 if (count % 2 == 1) {  
  39.                     timer.schedule(new MyTimerTask(), 4000);  
  40.                 } else {  
  41.                     timer.schedule(new MyTimerTask(), 2000);  
  42.                 }  
  43.                   
  44.             }  
  45.         }  
  46.         TimerTask tt = new MyTimerTask();  
  47.         timer.schedule(tt, 2000);  
  48.     }  
  49.   

2、利用jdk新特性来设计定时器

  1. package cn.itcast.thread;  
  2.   
  3. import java.util.Calendar;  
  4. import java.util.concurrent.Executors;  
  5. import java.util.concurrent.ScheduledExecutorService;  
  6. import java.util.concurrent.TimeUnit;  
  7.   
  8. public class ModernTimerTest {  
  9.   
  10.     public static void main(String[] args) {  
  11.   
  12.         final ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);  
  13.         timer.schedule(  
  14.                 new Runnable() {  
  15.                     public void run() {  
  16.                         System.out.println(Calendar.getInstance().get(Calendar.SECOND));  
  17.                     }  
  18.                 },   
  19.         1,   
  20.         TimeUnit.SECONDS  
  21.         );  
  22.           
  23.         class MyTask implements Runnable {  
  24.             public void run() {  
  25.                 System.out.println(" ----> " + Calendar.getInstance().get(Calendar.SECOND));  
  26.                 timer.schedule(new MyTask(), 2, TimeUnit.SECONDS);  
  27.             }  
  28.         }  
  29.           
  30.         timer.schedule(  
  31.                 new MyTask(),  
  32.                 1,   
  33.                 TimeUnit.SECONDS  
  34.         );  
  35.           
  36.     }  
  37.   
  38. }  

猜你喜欢

转载自stunizhengjia.iteye.com/blog/2246100