Java基础--定时任务Timer

一、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、在特定时间执行任务,只执行一次

public void schedule(TimerTask task,Date time)

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

public void schedule(TimerTask task,long delay)

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

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

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

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

参数:

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

period:重复执行的时间间隔

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

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

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

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

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

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

Timer注销

timer.cancel();

三、案例

1、特定时间后执行

public void schedule(TimerTask task,long delay)

参数:

task为:执行任务

delay:时间毫秒数

方法的含义:

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

案例:

1分钟后同步数据。

同步任务:

package com.yank.framework.common;

import java.util.TimerTask;

public class SynchroTimerTask extends TimerTask {

    @Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Synchro data to other servers.");
} }

定时任务:

package com.yank.framework.common;

import java.util.Timer;
import java.util.TimerTask; public class SynchroTest { public static void main(String[] args) {
// TODO Auto-generated method stub TimerTask task = new SynchroTimerTask();
Timer timer = new Timer();
timer.schedule(task, 1000);
} }

2、案例2:按点吃饭

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

package com.yank.framework.common;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.TimerTask; /*
* 定时吃饭
* */
public class EatTimerTask extends TimerTask { //吃饭时间
private static List<Integer> eatTimes;
/*
* 静态初始化
* */
static {
initEatTimes();
} /*
* 初始化吃饭时间
* */
private static void initEatTimes(){
eatTimes = new ArrayList<Integer>();
eatTimes.add(8);
eatTimes.add(12);
eatTimes.add(18);
} /*
* 执行
* */
@Override
public void run() {
// TODO Auto-generated method stub
Calendar calendar = Calendar.getInstance();
System.out.println("检查是否到了吃饭的点");
int hour = calendar.get(Calendar.HOUR_OF_DAY);
if(eatTimes.contains(hour))
{
System.out.println("饿了,吃饭...");
}
} }

定时检查执行:

package com.yank.framework.common;

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class EatTimerTaskTest {
public static void main(String[] arg){
TimerTask task = new EatTimerTask();
Calendar calendar= Calendar.getInstance(); Date firstTime = calendar.getTime();
//间隔:1小时
long period = 1000 * 60 * 60;
//测试时间每分钟一次
//period = 1000 * 60; Timer timer = new Timer();
timer.schedule(task, firstTime, period);
}
}

原文地址:http://www.cnblogs.com/yank/p/3955322.html

Java基础--定时任务Timer(转载)的更多相关文章

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

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

  2. Java基础—反射(转载)

    转载自: JAVA反射与注解 JAVA反射 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 反射机制是什么 反射 ...

  3. JAVA基础知识点(转载的)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/8846697 1.使用浮点型数值时,默认的类型是double,后面加上f或F才被识别为flo ...

  4. Java基础—注解(转载)

    概念 注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面 ...

  5. Java基础—数组(转载)

    Java 语言中提供的数组是用来存储固定大小的同类型元素.其实数组就是一个容器. 创建数组 Java 中声明数组的语法有两种: dataType[] arrayRefVar; // 首选的方法 dat ...

  6. Java基础—内部类(转载)

    转载自:java中的匿名内部类总结 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部 ...

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

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

  8. Java基础—运算符(转载)

    转载自:Java运算符 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运 ...

  9. Java基础复习--java.util.Timer定时任务

    在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下. (1)sche ...

随机推荐

  1. android:在ViewPager中使用Button

    最近在项目用用到ViewPager ,其中页面包含有Button,因为之前也有使用个ViewPager ,所以这个也照搬之前的方式,测试后发现点击button无法执行,这个button是在第一页面的默 ...

  2. JAVA版A星算法实现

    import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; import java.u ...

  3. SOCKET是什么

    一.问题的引入--socket的引入是为了解决不同计算机间进程间通信的问题 1.socket与进程的关系 1).socket与进程间的关系:socket   用来让一个进程和其他的进程互通信息(IPC ...

  4. Java基于文件的对象存储

    工作中经常需要处理对象的处理,有的时候还需要将对象保存到文件中做持久化. 特别是当不能使用数据库的时候就特别需要一个简单的对象集合的增删改查操作, 于是就有了下面这个文件DB的工具类 package ...

  5. 【前端】:Dom

    前言: 昨天写了篇关于JavaScript的,今天写篇Dom的(插入4个实例),写完之后感觉知识点还不少~ 内容当然会用到[前端]:JavaScript的知识.下篇博客会写关于jQuery~~ 一.D ...

  6. 在2017年,如何将你的小米4刷上Windows 10 mobile?

    众多攻略集大成者!资深软粉亲测有效! 参考教程: http://bbs.xiaomi.cn/t-11814358 http://bbs.xiaomi.cn/t-11736827 问:刷机前,我需要做什 ...

  7. 游戏UI框架设计(二) : 最简版本设计

    游戏UI框架设计(二) --最简版本设计 为降低难度决定先讲解一个最简版本,阐述UI框架的核心设计理念.这里先定义三个核心功能: 1:UI窗体的自动加载功能. 2:缓存UI窗体. 3:窗体生命周期(状 ...

  8. Python学习一:Python简介

    Python简介: Python是目前广泛使用的一门动态语言,类似Java,源代码必须首先由编译器转换成字节码(byte code),然后再由解释器来执行字节码.与Java不同的是,Python的编译 ...

  9. android shell常用命令

     du -sm foldername 查看文件夹foldername 的大小,单位是兆(m),du -sk foldername单位是k    adb shell rm -r /mnt/sdcard/ ...

  10. 我眼中的JAVA的那些数据结构应用

    能沉淀下来的东西,往往都很基础,整理了下JAVA中遇到的数据结构 目录大纲: 到目前接触到的 有几个说明: 可扩容数组 ArrayList 扩容数组的实现, 满了后扩容,扩容在1.5倍,通过copy过 ...