一、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// 可以通过继承该类,来实现自己的定时任务。publicabstractclassTimerTaskimplementsRunnable

三、Timer常用方法

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

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

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

publicvoid scheduleAtFixedRate(TimerTask task,Date firstTime,long period)

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

publicvoid 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;publicclassTestTimer{publicstaticvoid main(String[] args){Timer timer =newTimer();
timer.schedule(newMyTask(),1000,2000);}}classMyTaskextendsTimerTask{@Overridepublicvoid run(){System.out.println("每隔2秒我就出现一次……");}}

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

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

五、小结

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

 
实现TimerTask接口,并即为单元任务,我们的单次运行业务逻辑写在这里面
实例化一个Timer对象,用于启动TimerTask任务,并通过调用不同的方法设置任务的执行时间、频率

在实际的应用中,Timer多用于在夜间处理比较耗时并且数据状态稳定时候的一些后台操作,例如数据统计、数据备份等。 

使用Timer执行定时任务的更多相关文章

  1. [Swift实际操作]七、常见概念-(9)使用定时组件Timer执行定时任务

    本文将为你演示计时器的使用,使用计时器可以每隔一定时间执行某个函数. 在左侧的项目导航区,打开视图控制器的代码文件:ViewController.swift现在开始编写代码,实现任务定时的功能.定义一 ...

  2. 使用Timer和ScheduledThreadPoolExecutor执行定时任务

    Java使用Timer和ScheduledThreadPoolExecutor执行定时任务 定时任务是在指定时间执行程序,或周期性执行计划任务.Java中实现定时任务的方法有很多,主要JDK自带的一些 ...

  3. 服务器启动完成执行定时任务Timer,TimerTask

    由于项目需求:每隔一段时间就要调外部接口去进行某些操作,于是在网上找了一些资料,用了半天时间弄好了,代码: import java.util.TimerTask; public class Accou ...

  4. java中服务器启动时,执行定时任务

    package com.ripsoft.util; import java.util.Calendar; import java.util.Timer; import javax.servlet.Se ...

  5. .NET Core中使用IHostedService结合队列执行定时任务

    最近遇到了这样的场景:每隔一段时间,需要在后台使用队列对一批数据进行业务处理. Quartz.NET是一种选择,在 .NET Core中,可以使用IHostedService执行后台定时任务.在本篇中 ...

  6. 使用Quartz.net来执行定时任务

    Quartz.net使用方法:http://www.cnblogs.com/lizichao1991/p/5707604.html 最近,项目中需要执行一个计划任务,组长就让我了解一下Quartz.n ...

  7. SpringBoot执行定时任务@Scheduled

    SpringBoot执行定时任务@Scheduled 在做项目时,需要一个定时任务来接收数据存入数据库,后端再写一个接口来提供该该数据的最新的那一条. 数据保持最新:设计字段sign的值(0,1)来设 ...

  8. PHP执行定时任务

    PHP执行定时任务 1.当PHP像文件写入信息的时候 <?php for ($i=0; $i < 10; $i++) { $str="我是第".$i."条&q ...

  9. Jenkins入门之执行定时任务

    通过前面我们讲解了如何通过Jenkins执行windows command,powershell脚本,此时我们便可以开始完成一些简单任务了,然而可能看到我们都是通过手动按下Build Now按钮来执行 ...

随机推荐

  1. DOS批处理命令-@命令

    @命令是一个禁止当前语句回显的简单命令. 语法: @[command].[command]是要屏蔽的批处理命令 例如执行包含以下内容的bat文件 echo on @echo ------- @echo ...

  2. JavaScript生成GUID的多种算法小结

    全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) . GUID是一种由算法生成的二进制长度 ...

  3. Android Metro风格的Launcher开发系列第二篇

    前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客http://www.cnblogs.com/2010wuhao/p ...

  4. Objective-C 【继承、变量修饰符(私有变量/方法)、description方法】

    ------------------------------------------- 继承 一段代码: #import <Foundation/Foundation.h> @interf ...

  5. RTTI(Runtime Type Information )

    RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息.它提供了运行时确定对象类型的方法.本文将简略介绍 RTTI 的一些背景知识.描述 RTTI 的概念,并通 ...

  6. mysql 的rmp安装

    新文档/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) *//* Author: Nicolas Hery - http:// ...

  7. 一套帮助你理解C语言的测试题(转)

    前言 原文链接:http://www.nowamagic.net/librarys/veda/detail/775 内容 在这个网站(http://stevenkobes.com/ctest.html ...

  8. linux 定时执行 cron指令

    linux 中的 cron 定时执行命令,先上例子:每间隙两分钟把 "Hello world"写到 /tmp/hello.txt crontab -e */2 * * * * ec ...

  9. C#基础(六)——值类型与引用类型

    CLR支持两种类型:值类型和引用类型. 值类型包括C#的基本类型(用关键字int.char.float等来声明),结构(用struct关键字声明的类型),枚举(用enum关键字声明的类型):而引用类型 ...

  10. Mysql ID重新排列

    我们经常会遇到,在删除数据库某条记录时,原来的ID排序会有间隔,比如删除了ID为8的数据,这个表的ID排序就会从7直接到9, 那我们如何解决这个ID重新排列的问题呢? 只需一下三步: 1.删除这个表的 ...