`

java中的时间操作 三 定时任务

阅读更多

关于定时任务,似乎跟时间操作的联系并不是很大,但是前面既然提到了定时任务,索性在这里一起解决了。

设置定时任务很简单,用Timer类就搞定了。

一、延时执行

首先,我们定义一个类,给它取个名字叫TimeTask,我们的定时任务,就在这个类的main函数里执行。代码如下:

package test;

import java.util.Timer;

public class TimeTask {

public static void main(String[] args){

Timer timer = new Timer();

timer.schedule(new Task(), 60 * 1000);

}

}

解释一下上面的代码。

上面的代码实现了这样一个功能,当TimeTask程序启动以后,过一分钟后执行某项任务。很简单吧:先new一个Timer对象,然后调用它的schedule方法,这个方法有四个重载的方法,这里我们用其中一个,

public void schedule(TimerTasktask,longdelay)

首先,第一个参数

第一个参数就是我们要执行的任务。

这是一个TimerTask对象,确切点说是一个实现TimerTask的类的对象,因为TimerTask是个抽象类。上面的代码里面,Task就是我们自己定义的实现了TimerTask的类,因为是在同一个包里面,所以没有显性的import进来。Task类的代码如下

package test;

import java.util.TimerTask;

public class Task extends TimerTask {

public void run(){

System.out.println("定时任务执行");

}

}

我们的Task必须实现TimerTask的方法run,要执行的任务就在这个run方法里面,这里,我们只让它往控制台打一行字。

第二个参数

第二个参数是一个long型的值。这是延迟的时间,就是从程序开始以后,再过多少时间来执行定时任务。这个long型的值是毫秒数,所以前面我们的程序里面,过一分钟后执行用的参数值就是 60 * 1000。

二、循环执行

设置定时任务的时候,往往我们需要重复的执行这样任务,每隔一段时间执行一次,而上面的方法是只执行一次的,这样就用到了schedule方法的是另一个重载函数

public void schedule(TimerTasktask,longdelay,longperiod)

前两个参数就不用说什么了,最后一个参数就是间隔的时间,又是个long型的毫秒数(看来java里涉及到时间的,跟这个long是脱不了干系了),比如我们希望上面的任务从第一次执行后,每个一分钟执行一次,第三个参数值赋60 * 1000就ok了。

三、指定执行时间

既然号称是定时任务,我们肯定希望由我们来指定任务指定的时间,显然上面的方法就不中用了,因为我们不知道程序什么时间开始运行,就没办法确定需要延时多少。没关系,schedule四个重载的方法还没用完呢。用下面这个就OK了:

public void schedule(TimerTasktask,Datetime)

比如,我们希望定时任务20067200分执行,只要给第二个参数传一个时间设置为20067200分的Date对象就可以了。

有一种情况是,可能我们的程序启动的时候,已经是200673日了,这样的话,程序一启动,定时任务就开始执行了。

schedule最后一个重载的方法是

public void schedule(TimerTasktask,DatefirstTime,longperiod)

没必要说什么了吧:)

四、j2ee中的定时任务

在实际的项目中,往往定时任务需要对web工程中的资源进行操作,这样一来,用上面的单个程序的方式可能就有点力不从心了,因为很多web工程的资源它操作不到。

解决的办法是,使用Servlet,把执行定时任务的那些代码放到Servletinit()函数里就可以了,这个easy,就没有必要再写示例代码了吧(嘿嘿,其实是作者太懒了)。

分享到:
评论
1 楼 zhou363667565 2011-10-18  
写的很不错。

相关推荐

    java动态管理定时任务

    spring+quartz整合,动态管理定时任务,可对正在进行的任务操作增删改查,可配合数据库进行操作

    python 定时任务 定时运行jar程序 定时运行java程序 定时运行cmd命令

    定时任务,不是循环,可以自定义命令行,运行java程序,git命令,可以定时打包,更新、关机等操作,通过配置自定义时间 config.json 配置文件如下 { "timer": [ "10:00:00", "12:30:00", "20:00:00", "23:40...

    java定时器的使用

    在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。 对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。

    Java定时更新数据—定时器

     Java.util.Timer:一种线程设施,用于安排以后再后台线程中执行的任务.可安排任务执行一次或者定期重复执行.其中几个方法需要我们注意一下:  cancel():终止此计时器,丢弃所有当前已安排的任务。  ...

    Java的日期时间处理类讲解代码( Date 、Calendar、SimpleDateFormat、LocalDateTime)

    本源码资源提供了Java中的日期时间处理类相关内容,包括日期、时间和时区的操作方法和示例。...日期时间操作:学习如何使用日期时间类进行常见的日期和时间操作,如加减日期、比较两个日期、格式化日期等

    MYSQL定时清除备份数据的具体操作

    基于Linux下Crontab来基于cron表达式构建定时任务文档必定需要编写对应的脚本,但是在这个脚本中,由于需要操作数据库,必定会涉及到明文密码这样的一个数据,这样不是很安全。 由于使用到的是MYSQL数据库,而...

    Android开发技巧(三)—— 创建定时任务

    每种手机都有自己的休眠策略,Android手机在长时间不操作时会自动让CPU进入睡眠状态,这就导致JAVA原生Timer的定时任务无法运行。 所以我们需要借助Alarm唤醒CPU 一、Alarm机制 Alarm借助了AlermManager类,这个类和...

    Java在线医疗预约挂号系统源码.zip

    Java在线医疗预约挂号系统,登录后通过...12、定时任务 前端技术: 1、vue (1)指令 2、Element-ui 3、nuxt 4、npm 5、ECharts图表 注意点 阿里云存储模块service_oss的application配置文件中accessKeyId等值请填写自

    Java开发技术大全(500个源代码).

    showOrder_2.java 演示操作数求值顺序示例2 sign.java 用条件运算实现符号函数示例 signByIF.java 用if语句实现符号函数示例 triangleStar.java 输出一个由*组成的直角三角形 upperToLowCase.java 大写转换成...

    workerRunner:定时任务随时执行插件

    通常作为测试人员在测试定时任务时,一般有如下步骤:修改配置文件中任务的corn表达式;重启应用,等待任务执行,查看日志;再次测试时,需重复如上步骤。缺点:操作繁琐每次需重启等待,耗时影响测试时间SO,做了...

    Java并发编程(学习笔记).xmind

    某些应用程序中存在比较明显的任务边界,而在其他一些程序中则需要进一步分析才能揭示出粒度更细的并行性 任务的取消和关闭 任务取消 停止基于线程的服务 处理非正常的线程终止 JVM关闭 线程池...

    AopArms-AopArms编写了Android开发中常用的一套注解,如日志、异步处理、缓存、SP、延迟操作、定时任务、重试机制、try-catch安全机制、过滤频繁点击、拦截等,后续还会有更多更强大的注解功能加入.zip

    今天带来一款Android中比较实用的注解框架AopArms,其用法简单,里面编写了Android开发中常用的一套注解,如日志、异步处理、缓存、SP、延迟操作、定时任务、重试机制、try-catch安全机制、过滤频繁点击等,后续还会...

    万事通定时事务提醒万事通定时事务提醒

    本软件是一个可设置需要提醒的事务时间,并且定时进行事务提醒的实用工具. 以前使用了一些其他程序员写的闹钟提醒工具,但总是不能满足自己的需要. 比如,有的只能播放WAV,不能播放MP3,MID等格式音乐;有的操作上特别...

    Java如何做到无感知刷新token含示例代码(值得珍藏)

    此外,设置定时任务来刷新token也是一个有效的方法。这样,即使在token即将过期的情况下,也可以通过增加其有效时间来避免应用闪退的问题。 自动刷新token是一种后端解决方案,旨在解决token过期问题。后端会检查每...

    Java并发编程实战

    14.6 java.util.concurrent同步器类中的 AQS257 14.6.1 ReentrantLock257 14.6.2 Semaphore与CountDownLatch258 14.6.3 FutureTask259 14.6.4 ReentrantReadWriteLock259 第15章 原子变量与非阻塞同步机制261 ...

    java springboot快速开发权限框架

    9、引入quartz定时任务,可动态完成任务的添加、修改、删除、暂停、恢复及日志查看等功能 10、引入swagger文档支持,方便编写API接口文档 11、项目采用前后端分离架构,提升效率 12、前端组件丰富,集成layuiadmin,...

    Spring实现动态修改时间参数并手动开启关停操作

    spring实现定时任务的方式有三种,分别是java自带的timer类、spring task和quartz三种。本文只介绍spring自带的task和第三方quartz,感兴趣的朋友参考下吧

    java课程设计指导书.doc

    一、课程设计的基木任务 Java 高级程序设计是一门涉及Java 基础编程和高级编程的课程,需要较好的java 语言的程序设计和调试能力,如果学生能够按照要求,从时间和精力上保证完全的投入 ,相信能够有很大的收获,...

    基于quartz的任务调度插件

    基于quartz的任务调度插件,引入到spring项目即可使用,依赖于redis的订阅可以对任务立即运行,修改任务自动执行时间/频率,暂停等操作。适合需要定时任务的项目进行快速的集成开发,提高开发效率,降低开发难度。

    Java重入锁ReentrantLock

     a、用在定时任务时,如果任务执行时间可能超过下次计划执行时间,确保该有状态任务只有一个正在执行,忽略重复触发。  b、用在界面交互时点击执行较长时间请求操作时,防止多次点击导致后台重复执行(忽略重复...

Global site tag (gtag.js) - Google Analytics