精华内容
下载资源
问答
  • 主要为大家详细介绍了Java定时器Timer使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了java定时器timer使用方法代码示例,向大家分享了两部分代码,详细内容请参见正文,还是比较不错的,需要的朋友可以参考下。
  • java定时器Timer详解

    千次阅读 2019-08-27 16:19:31
    java定时器Timer 简单使用

    Timer 是jdk 自身提供的定时器, 可使用于实现一些简单的定时任务,如在某一时刻执行一次任务或以固定时间间隔执行任务. 一个Timer 实例可调度多个TimerTask, 底层使用队列(TaskQueue)存储, 不能并发启动定时任务. 因此, 对于复杂的定时任务, 笔者推荐使用quartz.

    1. Timer 常用API

    默认情况下,Timer 创建的线程为用户线程, 如果想让其为守护进程的话, 创建时需要设置isDaemon 为true.

    方法签名方法描述
    public Timer(String name)构造方法, 创建定时器, 并指定线程名称. 以定时调度线程为用户线程
    public Timer(boolean isDaemon)构造方法, 创建定时器, isDaemon 设置为trues时表示以守护线程执行
    public Timer(String name, boolean isDaemon)
    public void schedule(TimerTask task, long delay)只调度一次, 延迟delay毫秒之后执行
    public void schedule(TimerTask task, Date time)只调度一次, 在具体时刻time 执行
    public void schedule(TimerTask task, long delay, long period)循环调度, 在delay毫秒之后开始,每隔period毫秒执行一次
    public void schedule(TimerTask task, Date firstTime, long period)循环调度, 在时刻firstTime开始调度, 每隔period毫秒执行一次
    public void scheduleAtFixedRate(TimerTask task, long delay, long period)和schedule方法类似, 只是错过的任务会被继续执行
    public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)和schedule方法类似, 只是错过的任务会被继续执行
    public int purge()清理所有已取消状态的TimerTask
    public void cancel()取消所有调度

    2. 调度测试

    2.1 延时调度一次

    程序启动3秒之后, 执行一次

    public static void main(String[] args) throws InterruptedException {
        // 创建定时器
        Timer timer = new Timer("myTimer");
    
        // 创建定时任务
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println(LocalDateTime.now() + "-hello");
            }
        };
    
        // 添加调度
        timer.schedule(timerTask ,3000);
    }
    

    2.2 定时调度一次

    定时任务在下一分钟00秒时执行一次

    public static void main(String[] args) throws InterruptedException {
    
        // 创建定时器
        Timer timer = new Timer("myTimer");
    
        // 创建定时任务
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println(LocalDateTime.now() + "-hello");
            }
        };
    
        Date nextMinute = nextMinute();
        System.out.println("now:" + new Date() + ", execute:" + nextMinute);
    
        // 添加调度
        timer.schedule(timerTask ,nextMinute);
    
    }
    
    // 获取下一分钟的时间
    private static Date nextMinute(){
    
        Calendar calendar = Calendar.getInstance();
    
        calendar.add(Calendar.MINUTE, 1);
    
        calendar.add(Calendar.SECOND, -calendar.get(Calendar.SECOND));
    
        return calendar.getTime();
    
    }
    

    2.3 循环调度n次

    定时任务每隔1秒中执行一次, 执行n次后停止

    public static void main(String[] args) throws InterruptedException {
    
         // 创建定时器
         Timer timer = new Timer("myTimer");
    
         // 创建定时任务
         TimerTask timerTask = new TimerTask() {
    
             private int times = 0;
             @Override
             public void run() {
                 // 执行5次后, 取消任务
                 if(++times ==5 ){
                     this.cancel();
                 }
    
                 System.out.println(LocalDateTime.now() + "-hello, times:" + times);
             }
         };
    
         // 添加调度
         timer.schedule(timerTask ,0, 1000l);
    }
    

    2.4 无限循环调度

    定时任务每隔1秒中执行一次, 无限循环

    public static void main(String[] args) throws InterruptedException {
    
        // 创建定时器
        Timer timer = new Timer("myTimer");
    
        // 创建定时任务
        TimerTask timerTask = new TimerTask() {
    
            @Override
            public void run() {
    
                System.out.println(LocalDateTime.now() + "-hello");
            }
        };
    
        // 添加调度
        timer.schedule(timerTask ,0, 1000l);
    
    }
    

    3. scheduleAtFixedRate 与 schedule 区别

    scheduleAtFixedRate和schedule 的唯一区别就是, schedule 会将错过执行的定时任务丢弃, 而scheduleAtFixedRate 则会补上。

    3.1 测试用例

    public static void main(String[] args) {
    
            TimerTask timerTask = new TimerTask() {
    
                private int times = 0;
                @Override
                public void run() {
    
                    try {
    
                        if(times++ ==3){
                            this.cancel();
                        }
    
                        System.out.printf("planExecTime:%s, now:%s, times:%s\n", new Date(scheduledExecutionTime()), new Date(), times);
                        Thread.sleep(3000);
    
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
    
                }
            };
    
            Timer timer = new Timer("myTimer");
            timer.schedule(timerTask, nextMinute(), 1000);
        }
    
        private static Date nextMinute(){
    
            Calendar calendar = Calendar.getInstance();
    
            calendar.add(Calendar.MINUTE, 1);
    
            calendar.add(Calendar.SECOND, -calendar.get(Calendar.SECOND));
    
            return calendar.getTime();
    
        }
    
    

    3.2 scheduleAtFixedRate 调度结果

    从输出结果上来看, 定时任务计划执行时间与实际执行时间只有第一次一致,其它都不一致。 在定时任务执行的时间内,本应该执行的定时任务会依次被执行。

    planExecTime:Sun Mar 31 18:03:00 CST 2019, now:Sun Mar 31 18:03:00 CST 2019, times:1
    planExecTime:Sun Mar 31 18:03:01 CST 2019, now:Sun Mar 31 18:03:03 CST 2019, times:2
    planExecTime:Sun Mar 31 18:03:02 CST 2019, now:Sun Mar 31 18:03:06 CST 2019, times:3
    planExecTime:Sun Mar 31 18:03:03 CST 2019, now:Sun Mar 31 18:03:09 CST 2019, times:4
    

    3.2 schedule 调度结果

    从输出结果上可以看出, 计划执行时间和实际执行时间一致. 虽然笔者的调度时间为每隔1秒, 但是定时任务执行需要3秒的时间。 在定时任务执行期间,本应该有的调度全部丢弃。

    planExecTime:Sun Mar 31 18:01:00 CST 2019, now:Sun Mar 31 18:01:00 CST 2019, times:1
    planExecTime:Sun Mar 31 18:01:03 CST 2019, now:Sun Mar 31 18:01:03 CST 2019, times:2
    planExecTime:Sun Mar 31 18:01:06 CST 2019, now:Sun Mar 31 18:01:06 CST 2019, times:3
    planExecTime:Sun Mar 31 18:01:09 CST 2019, now:Sun Mar 31 18:01:09 CST 2019, times:4
    
    展开全文
  • java定时器Timer用法

    2019-01-15 09:29:32
    java定时器Timer用法,不依赖第三方工具包   解决方法: import java.util.Timer; import java.util.TimerTask; import com.crm.service.SendMessageService; 核心方法:...

    java定时器Timer的用法,不依赖第三方工具包

     

    解决方法:

    import java.util.Timer;

    import java.util.TimerTask;

    import com.crm.service.SendMessageService;

    核心方法:http://www.yayihouse.com/yayishuwu/chapter/1770

    展开全文
  • Java定时器Timer使用

    2018-06-29 09:06:13
    最近在实现比赛倒计时投票的功能,先后考虑使用session,Cookie 或 WebStorage 来实现,但最终采用Java定时器Timer实现了此功能。 以下是Timer的使用方法 public class TestTimer { public static void main...

    最近在实现比赛倒计时投票的功能,先后考虑使用session,CookieWebStorage 来实现,但最终采用Java定时器Timer实现了此功能。

     

    以下是Timer的使用方法

     

    public class TestTimer {
     public static void main(String[] args) {

            final Timer timer = new Timer();
            TimerTask task = new TimerTask() {
                @Override
                public void run() {
                    System.out.println("TimerTask is called!");
                    //timer.cancel();//终止执行
                }
            };

            /*
             * schedule 和 scheduleAtFixedRate 区别:
             *  可将schedule理解为scheduleAtFixedDelay,
             *  两者主要区别在于delay和rate
             *  1、schedule,如果第一次执行被延时(delay),
             *      随后的任务执行时间将以上一次任务实际执行完成的时间为准
             *  2、scheduleAtFixedRate,如果第一次执行被延时(delay),
             *      随后的任务执行时间将以上一次任务开始执行的时间为准(需考虑同步)
             *
             *  参数:1、任务体    2、延时时间(可以指定执行日期)3、任务执行间隔时间
             */
            // timer.schedule(task, 0, 1000 * 3);
            timer.scheduleAtFixedRate(task, 0, 1000 * 3);
        }
    }

     

    参考:https://blog.csdn.net/Zhang_Zippor/article/details/53024146

    展开全文
  • java Timer schedule

    最近在做Web项目,有一小块是开发一个数据库自动备份功能,用到了Java的定时器——Timer。项目开发中,也经常会遇到一些周期性的动作,废话不多说,直接贴代码:

    public class TimerHandler {
    /** timer */
    private Timertimer = null;
     
    /**
    *定时器销毁
    *
    */
    public void stopTimer() {
    if (null !=timer) {
    timer.cancel();
    }
    }
     
    /**
      *定时器启动
      *
      */
    public void startTimer(Stringperiod) {
       timer = new Timer(true);
       Date date;
       date = new SimpleDateFormat("yyyy-MM-dd mm:ss").parse("2016-05-26 14:10");
       timer.schedule(new MyTask(),date, 1 * 60 * 1000);}
        }
     
    }
     
    class MyTaskextends TimerTask {
       @Override
       public void run() {
       System.out.println("数据库成功备份!!!"); }
    }

    最关键的就是schedule方法,本文使用的有三个参数,第一个参数是TimerTask类,实现了run方法,可以写用户需要的代码。第二个参数是开始时间,第三个参数是第一次调用方法与第二次的间隔时间。

    Schedule还有很多其他方法,比如:

    schedule(TimerTask task, Date time)                                  安排在指定的时间执行指定的任务。

    schedule(TimerTask task,Date firstTime,long period)               安排指定的任务在指定的时间开始进行重复的固定延迟执行。

    schedule(TimerTask task, long delay)                                  安排在指定延迟后执行指定的任务。

    schedule(TimerTask task, long delay, long period)                  安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

    scheduleAtFixedRate(TimerTask task, Date firstTime,long period)  安排指定的任务在指定的时间开始进行重复的固定速率执行。

    scheduleAtFixedRate(TimerTask task,long delay, long period)      安排指定的任务在指定的延迟后开始进行重复的固定速率执行

    展开全文
  • java定时器 Timer

    千次阅读 2009-05-12 11:33:00
    java定时器 Timerjava定时器使用Timer)1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。private java.util....
  • 1.首先肯定是容器一启动就要启动定时器,所以我们可以选择把定时器写在一个监听器里,...第三步,写一个定时器,继承TimerTask,在复写的run()方法里写具体的业务逻辑。第四步,在自己的监听器里复写的public voi...
  • java定时器Timer

    2017-06-11 15:28:38
    Java定时任务调度工具–Timer和QuartTimer是JDK直接提供的,Quart是需要导入jar包的。Timer只有一个后台线程去执行任务,Quart有多个线程执行。Timer工具位于java.util.Timer中,可以上官方文档查看API.TimerThread...
  • java定时器Timer使用

    2021-05-03 20:51:39
    Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,可以计划执行一个任务一次或反复多次。 TimerTask是个抽象类,它的子类代表一个可以被Timer计划的任务。具体的任务在TimerTask中run接口中实现。 通过...
  • JAVA定时器Timer使用

    2017-08-08 10:19:09
    java定时器的实现主要是靠Timer来实现的 Timer中的常用的几个方法:  /**  *任务在delay时间后执行且只执行一次  **/  public void schedule(TimerTask task,long delay);  /**  *任务在时间为date...
  • Java定时器Timer小记

    2017-05-24 22:42:39
    Java中,我们经常会遇到需要定时执行任务的情况,如每秒生成一个随机数,制作小时...TimerTask为抽象类,其中有一个run()方法,为定时器Timer定时执行的任务。 Timer为定时器,通过调用其schedule(para1,para2[,para
  • java 定时器Timer

    2015-12-18 13:37:05
    对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。 import java.util.Timer; import java.util.TimerTask; Timer timertimer = new Timer( );   timer.sch
  • Java定时器Timer

    2018-03-01 15:53:16
    定时器的实现原理就是新开一个子线程执行定时任务。 一、一次执行定时器。一次执行定时器的时间如果在当前时间以前会立即执行任务,如果在未来时间,则会到指定的未来时间再执行任务。示例代码:public static void ...
  • java定时器timer类停止

    千次阅读 2019-08-11 15:42:09
    java定时器停止可以使用timer类的cancel方法,代码如下: finalTimertimer=newTimer(); TimerTasktask=newTimerTask(){ privateintcount; @Override publicvoid...
  •  定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的。在JDK中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务...
  • 2、 Java中的定时任务调度工具:Timer和Quartz Timer和Quartz区别: 1) Timer由JDK自身提供 2) Quartz时间控制功能更强大 3) 底层实现机制,Timer只有一个后台线程去执行定时任务,而Quartz拥有后台执行线程池,...
  • Java定时器概要
  • 定时器在Web开发中使用得不是很多。这里主要列举一下使用定时器的步骤,方便日后使用时查阅。 1:定义任务类,实现TimerTask接口,重写run方法。 public class MyTask extends TimerTask { pub...
  • java定时器timer

    2011-02-28 15:36:02
    对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。 private java.util.Timer timer; timer = new Timer(true); timer.schedule( new java.util.TimerTask() { public void run...
  •  Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外另起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。  TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer...
  • 定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的。在JDK中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务,...
  • > Timer 实现原理分析 > Timer 的缺陷 > Timer和ScheduledThreadPoolExecutor的区别 > Timer使用教程 > JAVATimer类的基本使用 > Timer用法 > Timer的注意事项
  • Java定时器Timer类的使用

    千次阅读 2016-12-11 17:16:56
    在应用开发当中,经常需要一些周期性的操作,比如每3分钟执行一次操作等,对于这样的操作最为方便、高效的实现方式就是使用java.util.Timer工具类。  Timer直接从Object继承,它相当于一个计时器,能够用它来制定...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,591
精华内容 6,636
热门标签
关键字:

java定时器timer用法

java 订阅