• 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 }
     
     
  • 相关阅读:
    Oracle-通过创建索引加快SQL执行效率
    Oracle-DG,MRP进程无法正常应用问题处理,重启大法好
    Oracle-DG,12c pdb创建测试
    Oracle-DG,疑问主库添加日志后,备库未操作主库日志比备库日志数量多,有什么影响?
    Oracle-DG疑问,什么情况下主库会发出一个会话连接备库
    Oracle-DG 主库将log_archive_dest_state_2远程归档线程参数设置为defer,为什么dg还是处于实时同步状态?
    Oracle-rm误删除数据文件,如何强制删除文件启动db
    Oracle-buffer cache过小导致SQL执行时间长
    win10下完全卸载-重装MySQL
    VSCode配置详细教程
  • 原文地址:https://www.cnblogs.com/litaiqing/p/4635178.html
Copyright © 2020-2023  润新知