使用Java写定时器

Java编写处理定时任务主要用到的类是java.util.Timer和java.util.TimerTask;

如下几行代码就可以实现一个具有定时执行任务的定时器:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import MailSender.MailSender;//该类为我另外封装的发邮件的类

public class TimeTest {

	public static void main(String args[]) throws ParseException {

		Timer timer = new Timer();

		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		  Date d1 = dateFormat.parse("2014/6/16 15:28:45");
		timer.schedule(new Task(),d1);
	}
}

class Task extends TimerTask{

	@Override
	public void run() {
		/*try {
			Runtime.getRuntime().exec("NotePad.exe");
		} catch (IOException e) {
			e.printStackTrace();
		}*/
		MailSender mailSender=new MailSender();
		boolean isSend = mailSender.SendMail();
		if(isSend){
			System.out.println("task has been excute!");
		}else{
			System.out.println("task has not been excute!");
		}
		System.out.println("定时线程已执行!");
	}
}

其中,TimerTask实现了Runable接口,该类对象默认会执行run方法,所以可以将要定时执行的功能代码置于其中,即可实现定时功能;

Timer类中的几个方法如下:

  • public void schedule(TimerTask task,Date time);

该方法安排在指定的时间执行指定的任务。如果此时间已过去,则安排立即执行该任务。

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

    安排指定的任务从指定的延迟(long delay)后开始进行重复的固定延迟执行。以近似固定的时间间隔(long period)进行后续执行。

    在固定延迟执行中,根据前一次执行的实际执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。从长期来看,执行的频率一般要稍慢于指定周期的倒数(假定
    Object.wait(long) 所依靠的系统时钟是准确的)。

    固定延迟执行适用于那些需要“平稳”运行的重复活动。换句话说,它适用于在短期运行中保持频率准确要比在长期运行中更为重要的活动。这包括大多数动画任务,如以固定时间间隔闪烁的光标。这还包括为响应人类活动所执行的固定活动,如在按住键时自动重复输入字符。

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

    安排指定的任务在指定的时间(firstTime)开始进行重复的固定延迟执行。

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

    安排指定的任务在指定的延迟(delay)后开始进行重复的固定速率执行。以近似固定的时间间隔(period)进行后续执行。

    在固定速率执行中,根据已安排的初始执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”。从长远来看,执行的频率将正好是指定周期的倒数(假定
    Object.wait(long) 所依靠的系统时钟是准确的)。 固定速率执行适用于那些对绝对 时间敏感的重复执行活动,如每小时准点打钟报时,或者在每天的特定时间运行已安排的维护活动。

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

    安排指定的任务在指定的时间开始进行重复的固定速率执行。

  • public void cancel();

    终止此计时器,丢弃所有当前已安排的任务。这不会干扰当前正在执行的任务(如果存在)。一旦终止了计时器,那么它的执行线程也会终止,并且无法根据它安排更多的任务。

    注意,在此计时器调用的计时器任务的 run 方法内调用此方法,就可以绝对确保正在执行的任务是此计时器所执行的最后一个任务。

    可以重复调用此方法;但是第二次和后续调用无效。

  • public int purge();

    从此计时器的任务队列中移除所有已取消的任务。调用此方法对计时器的行为没有影响,但是将无法引用队列中已取消的任务。如果没有对这些任务的外部引用,则它们就成为垃圾回收的合格对象。

使用Java写定时器,布布扣,bubuko.com

时间: 2024-08-01 22:44:53

使用Java写定时器的相关文章

java Quartz定时器任务与Spring task定时的几种实现,

java Quartz定时器任务与Spring task定时的几种实现 基于java 的定时任务实现, Quartz 时间详细配置    请查阅   http://www.cnblogs.com/sihuanian/p/5010872.html Quartz 时间简单介绍    请查阅最底部 spring框架来介绍. 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask

java之定时器任务Timer用法

在项目开发中,经常会遇到需要实现一些定时操作的任务,写过很多遍了,然而每次写的时候,总是会对一些细节有所遗忘,后来想想可能是没有总结的缘故,所以今天小编就打算总结一下可能会被遗忘的小点: 1. public void schedule(TimerTask task,Date time) 这个方法中如启动时,已经过了time的时间,则系统会在启动后直接执行一次, 话不多少直接上代码 package com.test.timer.task; import java.text.DateFormat;

用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中

我最近在用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中,第一次写项目,写过这类项目的多多提意见,哪方面的意见都行,有代码或者demo的求赏给我,谢谢

用Java写的爬虫程序

这是一个web查找的根本程序,从命令行输入查找条件(开端的URL.处置url的最大数.要查找的字符串), 它就会逐一对Internet上的URL进行实时查找,查找并输出匹配查找条件的页面. 这个程序的原型来自<java编程艺术>, 为了非常好的剖析,站长去掉了其间的GUI有些,并稍作修改以适用jdk1.5.以这个程序为基础,可以写出在互联网上查找 比如图像.邮件.页面下载之类的"爬虫". 先请看程序运转的进程: D:\java>javac  SearchCrawler

java中定时器的应用实例

1 package com.xiangshang.listener; 2 3 import java.util.Timer; 4 import java.util.TimerTask; 5 6 import javax.servlet.ServletContextEvent; 7 import javax.servlet.ServletContextListener; 8 9 public class MyTimerListener implements ServletContextListen

kafka集群搭建和使用Java写kafka生产者消费者

 kafka集群搭建 Java代码   1.zookeeper集群  搭建在110, 111,112 2.kafka使用3个节点110, 111,112 修改配置文件config/server.properties broker.id=110 host.name=192.168.1.110 log.dirs=/usr/local/kafka_2.10-0.8.2.0/logs 复制到其他两个节点,然后修改对应节点上的config/server.pro 3.启动,在三个节点分别执行 bin/kaf

java写的迷宫代码

迷宫代码:截图如下:package com.zxl.maze; /* * 抽象类表示选择不同的算法*/ public abstract class AbstractMap { /* * 得到数据*/ public abstract boolean[][] getData(int m,int n); /* * 重置*/ public abstract void reset(int m,int n); } package com.zxl.maze; /* *深度优先,生成迷宫*/ import ja

用JAVA写一个视频播放器

前言 跳过废话,直接看正文 当年入坑java是因为它的跨平台优势.那时我认为,"编写一次,处处运行."这听上去多么牛逼,应该是所有语言发展的终极之道,java势必会一统天下. 然而事实证明,那时的我还是太年轻. 正所谓鱼和熊掌不可兼得,若要享受跨平台带来的方便,便不可避免地要接受性能上的不足.事实上,java一直在致力于提高虚拟机的性能(JIT等技术),但面对对实时计算性能要求很高或涉及到用硬件优化的任务(视频的硬件编码.解码)时,仍远远比不上c或c++.因此,很少能够看到有人用jav

安卓开发 调用java写的jax-ws 格式的webservices

public static final String NAME_SPACE = "http://webService.sxthnet/"; public static String URL = "http://100.123.68.166:8080/wbs1/Server1Port"; public static String Method2="sayhello2"; public final String Action2=NAME_SPACE+