2.传统定时器技术回顾

java.util 
类 Timer

java.lang.Object
  java.util.Timer
方法摘要
void cancel() 
          终止此计时器,丢弃所有当前已安排的任务。
 int purge() 
          从此计时器的任务队列中移除所有已取消的任务。
void schedule(TimerTask task, Date time) 
          安排在指定的时间执行指定的任务。
void schedule(TimerTask task, Date firstTime, long period) 
          安排指定的任务在指定的时间开始进行重复的固定延迟执行
void schedule(TimerTask task, long delay) 
          安排在指定延迟后执行指定的任务。
void schedule(TimerTask task, long delay, long period) 
          安排指定的任务从指定的延迟后开始进行重复的固定延迟执行
void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 
          安排指定的任务在指定的时间开始进行重复的固定速率执行
void scheduleAtFixedRate(TimerTask task, long delay, long period) 
          安排指定的任务在指定的延迟后开始进行重复的固定速率执行
 
 
 1 import java.util.Date;
 2 import java.util.Timer;
 3 import java.util.TimerTask;
 4 import org.junit.Test;
 5 /**
 6  * 传统定时器
 7  * 工具 quartz 可以完成在周几执行任务的需求
 8  * @author LiTaiQing
 9  */
10 public class TraditionalTimerTest {
11     /**
12      * 传统定时器的使用实例
13      */
14     @Test
15     public void test1(){
16         /*
17          * schedule 调度
18          * Timer是定时器
19          * TimerTask是定时器的任务
20          */
21         new Timer().schedule(new TimerTask(){
22             @Override
23             public void run() {
24                 System.out.println("bombing!");
25             }
26         }, 10000,3000);//第一次执行是10秒之后,以后每隔3秒执行一次
27         printSeconds();
28     }
29     
30     /**
31      * 实现刚开始2秒执行,之后4秒执行一次
32      *         代码思想从每次2秒执行一次改到目标结果
33      */
34     //通过一个标记,判断当前任务应该多少秒后执行
35     private static int count = 0;
36     @Test
37     public void test2(){
38         /**
39          * 内部类内部不能出现静态变量。
40          */
41         class MyTimerTask extends TimerTask{
42             @Override
43             public void run() {
44                 count = (count + 1)%2;
45                 System.out.println("bombing!");
46                 new Timer().schedule(
47                     /*new TimerTask(){
48                         @Override
49                         public void run() {
50                             System.out.println("bombing!");
51                         }
52                     }*/
53                 new MyTimerTask(), 2000+2000*count);
54             }    
55         }
56         new Timer().schedule(new MyTimerTask(),2000);
57         printSeconds();
58     }
59     
60     /**
61      * “实现任务刚开始2秒执行,之后4秒执行一次”的另一种方法
62      */
63     @Test
64     public void test3(){
65         new Timer().schedule(new MyTimerTask2(), 2000);
66         printSeconds();
67     }
68     class MyTimerTask1 extends TimerTask{
69         @Override
70         public void run() {
71             System.out.println("bombing!");
72             new Timer().schedule(new MyTimerTask2(), 2000);
73         }    
74     }
75     class MyTimerTask2 extends TimerTask{
76         @Override
77         public void run() {
78             System.out.println("bombing!");
79             new Timer().schedule(new MyTimerTask1(), 4000);
80         }    
81     }
82     
83     private void printSeconds(){
84         while(true){
85             System.out.println(new Date().getSeconds());
86             try {
87                 Thread.sleep(1000);
88             } catch (InterruptedException e) {
89                 e.printStackTrace();
90             }
91         }
92     }
93 }
 
 
原文地址:https://www.cnblogs.com/litaiqing/p/4635178.html