`

java定时任务处理方法

    博客分类:
  • JAVA
阅读更多

Java2的开发包中提供了一种很使用的线程功能:提前安排将来某段时间执行某任务Timer ,TimerTask。你可以使用这些类创建后台进程,让其在等待一段规定的时间后执行,或者让其没隔一段时间执行。你也可以用Thread来完成,但利用Timer与TimerTask显然省事不少。
TimerTask实现了Runnable接口,待执行的任务置于run()中。Timer是一个安排TimerTask的类此此两者一般一起工作。所应用时首先硬创建一个TimerTask的对象,然后用一个Timer的类对象安排执行它
Timer类包含的方法有:
1.Timer()
以常规方式运行task
2.Timer(boolean)
true时使用后台进程线程。只要剩下的程序记叙运行,后台进程线程就会执行。
3.public void cancel()
终止Timer的功能执行,但不会对正在执行的任务有影响。当执行cancel方法后将不能再用其分配任务。
4.public void schedule(TimerTask task,Date time)
task被安排在time指定的时间执行,如果时间为过去时则任务立刻执行。
5.public void schedule(TimerTask task, Date firstTime, long period)
task被安排在time指定的时间执行,执行后将每隔period(毫秒)反复执行。由于规定的时间间隔并不能保证与时钟精准的同不步,所以该方
法最适合从短期看保持频率准确是更重要的的地方
6.public void schedule(TimerTask task, long delay)
task被安排在delay(毫秒)指定的时间后执行。
7.public void schedule(TimerTask task,long delay, long period)
task被安排在delay(毫秒)指定的时间后执行。执行后将每隔period(毫秒)反复执行。
8.public void scheduleAtFixedRate(TimerTask task,Date firstTime, long period)
task被安排在firstTime指定的时间执行。执行后将每隔period(毫秒)反复执行。每一次重复的时间时盒第一次执行而不是和前一次执行有关


。因此执行的总速度是固定的。
9.public void scheduleAtFixedRate(TimerTask task,long delay,long period)
task被安排在delay(毫秒)指定的时间后执行。执行后将每隔period(毫秒)反复执行。每一次重复的时间时盒第一次执行而不是和前一次执


行有关。因此执行的总速度是固定的。
TimerTask的主要方法:
1.public boolean cancel()
终止任务的执行运行。如果Timer时要求循环执行的,则如果正在执行,则执行完了就再步会循环。如果还未执行或处于停歇期,则不会执行



2.public abstract void run()
3.public long scheduledExecutionTime()
返回被安排最后执行任务的时间。一般确定任务的当今的实行是否足够及时 ,证明进行被计划的活动为正当:
public void run() {
if (System.currentTimeMillis() - scheduledExecutionTime() >=
MAX_TARDINESS)
return; // Too late; skip this execution.
// Perform the task
}


4.protected TimerTask()

 

例:


import java.util.*;
import java.io.*;

 

public class doTask extends TimerTask {
String index;
Timer myTimer = new Timer();
public doTask(String index) {
this.index = index;
}


public void run() {
System.out.println(index);
}


public static void main(String args[]) {
doTask myTask1 = new doTask("First task");
myTask1.start(0,3);
doTask myTask2 = new doTask("Second task");
myTask2.start(0,1);


try{
Thread.sleep(6000);
}
catch(InterruptedException e){
}

myTask1.end();
myTask2.end();//程序结束时用cancel()结束Timer

}


public void start(int delay, int internal) {
myTimer.schedule(this, delay * 1000, internal * 1000); //利用timer.schedule方法
}
public void end(){
myTimer.cancel();
}
}


输出:
First task
Second task
Second task
Second task
First task
Second task
Second task
Second task

===================================================

timer及timertask的用法

使用TimerTask

 

import java.util.Timer;
import java.util.TimerTask;
import java.util.Date;

/**
* @author vincent
*/
public class TimerTest {

public static void main(String[] args) {
Timer t = new Timer();

//在5秒之后执行TimerTask的任务
t.schedule(new TimerTask(){
public void run()
{System.out.println("this is task you do1");}
},5*1000);


//在Date指定的特定时刻之后执行TimerTask的任务
Date d1 = new Date(System.currentTimeMillis()+1000);
t.schedule(new TimerTask(){
public void run()
{System.out.println("this is task you do2");}
},d1);


//在Date指定的特定时刻之后,每隔1秒执行TimerTask的任务一次
Date d2 = new Date(System.currentTimeMillis()+1000);
t.schedule(new TimerTask(){
public void run()
{System.out.println("this is task you do3");}
},d2,1*1000);


//在3秒之后,每隔1秒执行TimerTask的任务一次
t.schedule(new TimerTask(){
public void run()
{System.out.println("this is task you do4");}
},3*1000,1*1000);

//在3秒之后,绝对每隔2秒执行TimerTask的任务一次

t.scheduleAtFixedRate(new TimerTask(){
public void run()
{System.out.println("this is task you do6");}
},3*1000,2*1000);
}

schedule和scheduleAtFixedRate的区别在于,如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上。

比如

SimpleDateFormat fTime = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date d1 = fTime.parse("2005/12/30 14:10:00");

t.scheduleAtFixedRate(new TimerTask(){
public void run()
{
System.out.println("this is task you do6");
}
},d1,3*60*1000);

间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,如果我在14:17:00分执行这个程序,那么会立刻打印3次

this is task you do6 //14:10
this is task you do6 //14:13
this is task you do6 //14:16

并且注意,下一次执行是在14:19 而不是 14:20。就是说是从指定的开始时间开始计时,而不是从执行时间开始计时。

但是上面如果用schedule方法,间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,那么在14:17:00分执行这个程序,则立即执行程序一次。并且下一次的执行时间是 14:20,而不是从14:10开始算的周期(14:19)。


}

分享到:
评论

相关推荐

    java定时任务,每天定时执行任务

    Java 定时任务,每天定时执行任务 Java 定时任务是指在 Java 语言中实现的定时执行任务的机制,通过使用 Timer 和 TimerTask 两个类,可以实现定时执行任务的功能。在这个例子中,我们将实现每天定时执行任务的功能...

    java定时任务调度

    Java定时任务调度是Java开发中常见的一种功能,用于在特定时间执行特定的任务,例如数据同步、日志清理、报表生成等。在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring...

    java轻松实现—定时任务

    在Web应用中,我们可以利用Servlet容器提供的特性来更优雅地处理定时任务,这就是描述中提到的方法。 首先,我们需要在`web.xml`文件中添加一个监听器(listener)。监听器是Servlet规范的一部分,它会在特定的事件...

    java定时任务小例子

    Java定时任务是编程中常见的一种需求,用于在特定时间或间隔执行特定的代码逻辑。在这个“java定时任务小例子”中,我们可以看到两个关键文件:`TimerTest.java`和`DoTask.java`,它们分别代表了定时器的任务调度和...

    Java定时执行某个任务

    在Java编程中,定时执行某个任务是一项常见的需求,例如定期备份数据、发送邮件或执行维护操作等。要实现这一功能,Java提供了...在实际开发中,理解并熟练掌握这两种方法能帮助我们编写出更加高效和稳定的定时任务。

    JAVA定时任务调度

    Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...

    java定时任务开源案例

    Java定时任务是软件开发中一个不可或缺的特性,它允许程序在特定时间执行预定的任务,而无需用户干预。在Java世界里,实现定时任务的方式多种多样,包括但不限于使用Java内置的`java.util.Timer`和`java.util....

    java 定时任务及jar包

    Java定时任务是Java编程中一个重要的特性,它允许开发者安排任务在特定的时间点或周期性地执行。在Java中,我们可以使用内置的`java.util.Timer`类和`java.util.concurrent.ScheduledExecutorService`来实现定时任务...

    java定时任务

    "java定时任务" java定时任务是指在...java定时任务可以使用多种方式来实现,包括使用Timer和TimerTask类、使用Thread类的sleep方法、使用ScheduledExecutorService类等。选择哪种方式取决于具体的应用场景和需求。

    java动态管理定时任务

    在Java开发中,定时任务是不可或缺的一部分,尤其在企业级应用中,用于执行定期的数据处理、报表生成、系统维护等工作。Spring框架与Quartz库的整合提供了强大的动态管理定时任务的能力。下面我们将深入探讨这个主题...

    java 定时任务管理框架

    Java定时任务管理框架是开发中常见的一种工具,用于在特定时间执行特定任务,极大地提高了工作效率。Citic Scheduler作为这样一个框架,旨在简化Java项目中的定时任务管理。它提供了一个直观的用户界面,允许开发者...

    java 定时执行任务

    Java定时执行任务是Java开发中常见的一种需求,用于在特定时间点或按照预设周期执行某段代码。在Java中,有两种主要的方式来实现定时任务:Java.util.Timer类和java.util.concurrent包下的ScheduledExecutorService...

    java写定时任务,定时任务、定时器详细示例

    Java中的定时任务与定时器是实现自动化操作的关键技术之一,特别是在需要周期性执行某些功能的场景下,如数据同步、日志清理、定时发送邮件等。本文将深入探讨如何使用Java标准库中的`java.util.Timer`和`java.util....

    java 定时任务

    Java定时任务是软件开发中的一个重要组成部分,特别是在服务端应用程序中,常常需要在特定时间执行某些操作,例如数据备份、清理过期数据、发送通知等。SpringBoot框架为开发者提供了便捷的方式来实现这些定时任务,...

    java 定时备份数据库

    总之,实现Java定时备份MySQL数据库需要理解如何在Java中调用外部命令,如何创建定时任务,以及如何与Spring等框架集成。在SSM项目中,可以利用Spring的定时任务特性来优雅地管理备份任务。记得在实际应用中处理异常...

    java定时任务调度之Timer 简单示例

    Java定时任务调度是Java应用程序中常见的一种功能,用于在特定时间执行特定任务,例如定期备份、数据清理等。`Timer`类是Java中用于实现定时任务调度的一个基础工具,它位于`java.util`包中。在本文中,我们将深入...

    定时任务(java)

    然而,`Timer`和`TimerTask`类在处理多个定时任务时可能会出现线程同步问题,因此在复杂的项目中,更推荐使用`java.util.concurrent.ScheduledExecutorService`。它提供了更强大、更灵活的定时任务管理能力,可以...

Global site tag (gtag.js) - Google Analytics