一、Timer介绍

java.util.Timer

java.util.TimerTask

Timer是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类,如下所示:

  public abstract class TimerTask implements Runnable

  可以通过继承该类,来实现自己的定时任务。

  Timer定时器实例有多种构造方法:

  Timer()

  创建一个新计时器。

  Timer(boolean isDaemon)

  创建一个新计时器,可以指定其相关的线程作为守护程序运行。

  Timer(String name)

  创建一个新计时器,其相关的线程具有指定的名称。

  Timer(String name, boolean isDaemon)

  创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行。

二、Timer方法

定时执行方法

1、在特定时间执行任务,只执行一次

  1. public void schedule(TimerTask task,Date time)

2、在特定时间之后执行任务,只执行一次

  1. public void schedule(TimerTask task,long delay)

3、指定第一次执行的时间,然后按照间隔时间,重复执行

  1. public void schedule(TimerTask task,Date firstTime,long period)

4、在特定延迟之后第一次执行,然后按照间隔时间,重复执行

  1. public void schedule(TimerTask task,long delay,long period)

参数:

delay: 延迟执行的毫秒数,即在delay毫秒之后第一次执行

period:重复执行的时间间隔

5、第一次执行之后,特定频率执行,与3同

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

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

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

方法名称schedule()和scheduleAtFixedRate()两者的区别

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

Timer注销

  1. timer.cancel();

三、案例

1、特定时间后执行

  1. public void schedule(TimerTask task,long delay)

参数:

task为:执行任务

delay:时间毫秒数

方法的含义:

在delay毫秒后执行任务task,只执行一次。

案例:

1分钟后同步数据。

同步任务:

  1. package com.yank.framework.common;
  2.  
  3. import java.util.TimerTask;
  4.  
  5. public class SynchroTimerTask extends TimerTask {
  6.  
  7. @Override
  8. public void run() {
  9. // TODO Auto-generated method stub
  10. System.out.println("Synchro data to other servers.");
  11. }
  12.  
  13. }

定时任务:

  1. package com.yank.framework.common;
  2.  
  3. import java.util.Timer;
  4. import java.util.TimerTask;
  5.  
  6. public class SynchroTest {
  7.  
  8. public static void main(String[] args) {
  9. // TODO Auto-generated method stub
  10.  
  11. TimerTask task = new SynchroTimerTask();
  12. Timer timer = new Timer();
  13. timer.schedule(task, 1000);
  14. }
  15.  
  16. }

2、案例2:按点吃饭

首先定义吃饭的任务,制定饭点,没小时进行检查,到点就吃饭。

  1. package com.yank.framework.common;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Calendar;
  5. import java.util.List;
  6. import java.util.TimerTask;
  7.  
  8. /*
  9. * 定时吃饭
  10. * */
  11. public class EatTimerTask extends TimerTask {
  12.  
  13. //吃饭时间
  14. private static List<Integer> eatTimes;
  15. /*
  16. * 静态初始化
  17. * */
  18. static {
  19. initEatTimes();
  20. }
  21.  
  22. /*
  23. * 初始化吃饭时间
  24. * */
  25. private static void initEatTimes(){
  26. eatTimes = new ArrayList<Integer>();
  27. eatTimes.add(8);
  28. eatTimes.add(12);
  29. eatTimes.add(18);
  30. }
  31.  
  32. /*
  33. * 执行
  34. * */
  35. @Override
  36. public void run() {
  37. // TODO Auto-generated method stub
  38. Calendar calendar = Calendar.getInstance();
  39. System.out.println("检查是否到了吃饭的点");
  40. int hour = calendar.get(Calendar.HOUR_OF_DAY);
  41. if(eatTimes.contains(hour))
  42. {
  43. System.out.println("饿了,吃饭...");
  44. }
  45. }
  46.  
  47. }

定时检查执行:

  1. package com.yank.framework.common;
  2.  
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. import java.util.Timer;
  6. import java.util.TimerTask;
  7.  
  8. public class EatTimerTaskTest {
  9. public static void main(String[] arg){
  10. TimerTask task = new EatTimerTask();
  11. Calendar calendar= Calendar.getInstance();
  12.  
  13. Date firstTime = calendar.getTime();
  14. //间隔:1小时
  15. long period = 1000 * 60 * 60;
  16. //测试时间每分钟一次
  17. //period = 1000 * 60;
  18.  
  19. Timer timer = new Timer();
  20. timer.schedule(task, firstTime, period);
  21. }
  22. }

定时任务Timer的更多相关文章

  1. Java基础--定时任务Timer

    Java基础--定时任务Timer 一.Timer介绍 java.util.Timer java.util.TimerTask Timer是一个定时器类,通过该类可以为指定的定时任务进行配置.Time ...

  2. Java基础--定时任务Timer(转载)

    Java基础--定时任务Timer 一.Timer介绍 java.util.Timer java.util.TimerTask Timer是一个定时器类,通过该类可以为指定的定时任务进行配置.Time ...

  3. JAVA定时任务Timer

    故事起因 因业务需要,写了一个定时任务Timer,任务将在每天的凌晨2点执行,代码顺利码完,一切就绪,开始测试.运行程序,为了节省时间,将系统时间调整为第二天凌晨1点59分,看着秒针滴答滴答的转动,期 ...

  4. Java定时任务Timer、TimerTask与ScheduledThreadPoolExecutor详解

     定时任务就是在指定时间执行程序,或周期性执行计划任务.Java中实现定时任务的方法有很多,本文从从JDK自带的一些方法来实现定时任务的需求. 一.Timer和TimerTask  Timer和Tim ...

  5. 详解java定时任务---Timer篇

    一.简介      在java的jdk中提供了Timer.TimerTask两个类来做定时任务. Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,而TimerTask一个抽象类,它的子 ...

  6. Java之旅--定时任务(Timer、Quartz、Spring、LinuxCron)

    在Java中,实现定时任务有多种方式,本文介绍4种,Timer和TimerTask.Spring.QuartZ.Linux Cron. 以上4种实现定时任务的方式,Timer是最简单的,不需要任何框架 ...

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

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

  8. java定时任务Timer与ScheduledExecutorService<转>

    在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析java Timer定时器. ...

  9. java web定时任务---Timer

    写在前面: 在最近的项目中需要每天定时对数据库表进行查询,并完成相关数据的更新操作.首先让我想到的是Timer类,记得在一开始维护那个老系统的时候,开了个接口,也涉及到了定时的操作.下面就记录下大概的 ...

  10. 定时任务-Timer

    Timer类的全限定名 java.util.Timer java.util.Timer类的构造函数 public Timer(); public Timer(boolean isDaemon); pu ...

随机推荐

  1. xmpp 与服务器连接并身份验证成功

    *  XMPP的特点,所有的请求都是通过代理的方式实现的 * *  因为xmpp是经由网络服务器进行数据通讯的,因此所有的,因此所有的请求都是提交给服务器处理 * *  服务器处理完毕止呕,以代理的方 ...

  2. 【bzoj2901】矩阵求和 前缀和

    题目描述 给出两个n*n的矩阵,m次询问它们的积中给定子矩阵的数值和. 输入 第一行两个正整数n,m. 接下来n行,每行n个非负整数,表示第一个矩阵. 接下来n行,每行n个非负整数,表示第二个矩阵. ...

  3. 2013 年 acm 长春现场赛

    A - Hard Code Hdu 4813 题目大意:给你一坨字符串,让你输出其栅栏密码的解码形式 思路:水题模拟 #include<iostream> #include<cstd ...

  4. 刷题总结——谈笑风生(主席树+dfs序的应用)

    题目: Description 设T 为一棵有根树,我们做如下的定义:• 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道高明到哪里去了”.• 设a 和 b 为 T 中的两个不同 ...

  5. 转 Linux文件管理

    Linux文件管理 http://www.cnblogs.com/vamei/archive/2012/09/09/2676792.html 作者:Vamei 出处:http://www.cnblog ...

  6. noj 2069 赵信的往事 [yy题 无限gcd]

    njczy2010 2069 Accepted 31MS   224K 1351Byte G++ 2014-11-13 13:32:56.0 坑爹的无限gcd,,,尼玛想好久,原来要x对y算一次,y再 ...

  7. shell的select脚本的简单入门

    shell的select脚本的简单入门 语法:select var in ...;do break;doneecho $var 示例: #/bin/bash echo "what is yo ...

  8. Mybatis resultMap空值映射问题

    参考博客:https://www.oschina.net/question/1032714_224673 http://stackoverflow.com/questions/22852383/how ...

  9. JS基础之BOM对象

    BOM 对象 JavaScript分为 ECMAScript,DOM,BOM. BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作.使用 BOM,开发者可以移动窗口.改变状态栏中的文本以及执行其 ...

  10. 选取第K大数的快速选择算法和注意事项

    快速选择算法,是一种能在大致O(N)的时间内选取数组中第k大或者k小的算法.其基本思路与快速排序算法类似,也是分治的思想. 其实这个算法是个基础算法,但是不常用,所以今天编的时候错了POJ2388,才 ...