博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Timer执行定时任务
阅读量:7212 次
发布时间:2019-06-29

本文共 2824 字,大约阅读时间需要 9 分钟。

  hot3.png

一、Timer概述

在Java开发中,会碰到一些需要定时或者延时执行某些任务的需求,这时,我们可以使用Java中的Timer类实现。

二、Timer介绍

Timer是一个定时器类,通过该类可以为指定的定时任务进行配置,所在jar包路径:java.util.TimerTimer定时器实例有多种构造方法:Timer() // 创建一个新计时器Timer(boolean isDaemon) //创建一个新计时器,可以指定其相关的线程作为守护程序运行Timer(String name) //创建一个新计时器,其相关的线程具有指定的名称Timer(String name, boolean isDaemon) //创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类,所在jar包路径:java.util.TimerTask// 可以通过继承该类,来实现自己的定时任务。public abstract class TimerTask implements Runnable

三、Timer常用方法

在特定时间执行任务,只执行一次 public void schedule(TimerTask task,Date time) 在特定时间之后执行任务,只执行一次 public void schedule(TimerTask task, long delay) 指定第一次执行的时间,然后按照间隔时间,重复执行 public void schedule(TimerTask task, Date firstTime, long period) 在特定延迟之后第一次执行,然后按照间隔时间,重复执行

public void schedule(TimerTask task, long delay, long period)/*参数说明 delay: 延迟执行的毫秒数,即在delay毫秒之后第一次执行 period:重复执行的时间间隔*/

第一次执行之后,特定频率执行,与3效果相同

public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

在delay毫秒之后第一次执行,后按照特定频率执行

public void scheduleAtFixedRate(TimerTask task, long delay, long period)

Timer注销

timer.cancel();

schedule()和scheduleAtFixedRate()的区别

schedule()方法更注重保持间隔时间的稳定:保障每隔period时间可调用一次 scheduleAtFixedRate()方法更注重保持执行频率的稳定:保障多次调用的频率趋近于period时间,如果任务执行时间大于period,会在任务执行之后马上执行下一次任务 四、Timer使用示例

使用Timer每隔2秒打印一次数据,并且任务在Timer启动1秒之后开始

import java.util.Timer;import java.util.TimerTask;public class TestTimer {    public static void main(String[] args) {        Timer timer = new Timer();        timer.schedule(new MyTask(), 1000, 2000);    }}class MyTask extends TimerTask {    @Override    public void run() {        System.out.println("每隔2秒我就出现一次……");    }}

使用Timer每隔一段时间随机生成数字

import java.util.Timer;import java.util.Random;import java.util.TimerTask;public class TimerTest {    public static void main(String[] args) {        Timer timer = new Timer();        NewTimerTask timerTask = new NewTimerTask();        //程序运行后立刻执行任务,每隔100ms执行一次        timer.schedule(timerTask, 0, 100);    }}class NewTimerTask extends TimerTask {    @Override    public void run() {        createRandomNumber();        createRandomNumberFromMathRandom();    }    //用纯Math中的方法来随机生成1-10之间的随机数    private void createRandomNumberFromMathRandom() {        int j = (int)(Math.round(Math.random()*10 + 1));        System.out.println("随机生成的数字为:"+j);    }    //用Random类的方式来随机生成1-10之间的随机数    private void createRandomNumber() {         Random random = new Random(System.currentTimeMillis());         int value = random.nextInt();         value = Math.abs(value);         value = value%10 + 1;         System.out.println("新生成的数字为:" + value);    }}

五、小结

通过上面的两个简单示例,我们可以很清楚的知道Timer的用法:

实现TimerTask接口,并即为单元任务,我们的单次运行业务逻辑写在这里面 实例化一个Timer对象,用于启动TimerTask任务,并通过调用不同的方法设置任务的执行时间、频率 在实际的应用中,Timer多用于在夜间处理比较耗时并且数据状态稳定时候的一些后台操作,例如数据统计、数据备份等。

转载于:https://my.oschina.net/biezhi/blog/485730

你可能感兴趣的文章
专访刘刚:360手机卫士的性能监控与优化
查看>>
去哪儿网消息队列设计与实现
查看>>
MySQL 5.7中的更多改进,包括计算列
查看>>
书评与访谈:Scrum for Managers
查看>>
借助Unity AR Foundation构建跨平台AR应用
查看>>
《The Coaching Booster》问与答
查看>>
独立云计算服务商的多维实践之道:用户需求驱动变革
查看>>
JavaMail邮件发送不成功的那些坑人情况及分析说明
查看>>
GitHub Checks API帮助应用实现进一步的持续集成
查看>>
庖丁解牛迭代器,聊聊那些藏在幕后的秘密
查看>>
勇敢的交流者在敏捷组织中的重要性
查看>>
Android Pie提供了自适应供电、神经网络API 1.1等新特性
查看>>
蓝云公布2019云生态战略,如何解决企业上云关键问题?
查看>>
FaaS、PaaS和无服务器体系结构的优势
查看>>
Ceylon语言加入Eclipse基金会
查看>>
一文盘点MWC 2019所有5G设备和研发进展
查看>>
【leetcode】85. Maximal Rectangle 0/1矩阵的最大全1子矩阵
查看>>
网站真分页js代码该怎么写?
查看>>
教你五分钟入门使用html5 svg绘制图形
查看>>
vue-concise-slider vue滑动组件
查看>>