java 怎么写定时任务

,最好给个例子

如果要执行一些简单的定时器任务,无须做复杂的控制,也无须保存状态,那么可以考虑使用JDK 入门级的定期器Timer来执行重复任务。

一、原理

JDK中,定时器任务的执行需要两个基本的类:
java.util.Timer;
java.util.TimerTask;

要运行一个定时任务,最基本的步骤如下:
1、建立一个要执行的任务TimerTask。
2、创建一个Timer实例,通过Timer提供的schedule()方法,将 TimerTask加入到定时器Timer中,同时设置执行的规则即可。

当程序执行了Timer初始化代码后,Timer定时任务就会按照设置去执行。

Timer中的schedule()方法是有多种重载格式的,以适应不同的情况。该方法的格式如下:
void schedule(TimerTask task, Date time)
安排在指定的时间执行指定的任务。
void schedule(TimerTask task, Date firstTime, long period)
安排指定的任务在指定的时间开始进行重复的固定延迟执行。
void schedule(TimerTask task, long delay)
安排在指定延迟后执行指定的任务。
void schedule(TimerTask task, long delay, long period)
安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

Timer是线程安全的,此类可扩展到大量同时安排的任务(存在数千个都没有问题)。其所有构造方法都启动计时器线程。可以调用cancel() 终止此计时器,丢弃所有当前已安排的任务。purge()从此计时器的任务队列中移除所有已取消的任务。此类不提供实时保证:它使用 Object.wait(long) 方法来安排任务。

TimerTask是一个抽象类,由 Timer 安排为一次执行或重复执行的任务。它有一个抽象方法run()----计时器任务要执行的操作。因此,每个具体的任务类都必须继承TimerTask类,并且重写run()方法。另外它还有两个非抽象的方法:
boolean cancel()
取消此计时器任务。
long scheduledExecutionTime()
返回此任务最近实际 执行的安排 执行时间。

二、例子

下面用Timer实现一个简单例子:

package stu.timer;

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

/**
* 重复执行的任务
*
* @author leizhimin,2008-10-9 9:20:20
*/
public class TestTimerTask extends TimerTask {
/**
* 此计时器任务要执行的操作。
*/
public void run() {
Date executeTime = new Date(this.scheduledExecutionTime());
System.out.println("本次任务执行的时间是" + executeTime);
}
}

package stu.timer;

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

/**
* 测试JDK Timer的执行
*
* @author leizhimin,2008-10-9 9:24:35
*/
public class TestTimer {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TestTimerTask();
timer.schedule(task, 500L, 1000L);
}
}

运行结果:
本次任务执行的时间是Thu Oct 09 09:47:57 CST 2008
本次任务执行的时间是Thu Oct 09 09:47:58 CST 2008
本次任务执行的时间是Thu Oct 09 09:47:59 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:00 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:01 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:02 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:03 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:04 CST 2008
本次任务执行的时间是Thu Oct 09 09:48:05 CST 2008
......

参考资料:http://www.java3z.com/cwbwebhome/article/article2/210208.html?id=2117

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-10
用线程很容易实现的。而且比较灵活。下面是一个示例你看看吧:
public class Test implements Runnable {
int start = 0;
int end = 0;

public Test(int end) {
new Thread(this).start();
this.end = end;
}

public void run() {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(start == end)
print();
start++;
}
}
private void print() {
System.out.println("你的任务在"+end+"秒钟后执行了");
}
public static void main(String[] args) {
new Test(3);
}
}
另外Java里也有定时器类Timer也可以的,但它的本质也是线程。
第2个回答  2010-07-10
据我所了解,你是不是要定时执行一些程序,或者定时清理一些东西啊?
写一个批处理就可以了。所谓的批处理就是.bat文件。然后把这个文件添加到系统中的“任务计划”中,定时执行这个bat文件就可以了。至于bat文件里面的内容,那就看你调用什么程序了。下面是一个bat文件调用重启命令的例子:

echo %date%-%time%时开始重启 >D:\重启日志.TXT
shutdown -r -f
echo 在%date%-%time%时重启完毕 >D:\重启日志.TXT

并且这个执行完毕之后,在d盘重启日志文档中写入重启时间和重启完毕的时间。

Java 定时任务的几种实现方式总结
实现一、使用Thread等待的方式 public static class TimerThread extends Thread{ Override public void run() { super.run();while (true){ doSomething();try { Thread.sleep(5000);} catch (InterruptedException e) { e.printStackTrace();} } } private void doSomething() { } } 实现二...

不用任何框架,Java 就能实现定时任务的 3 种方法!
本文介绍 Java 实现定时任务的三种方法:sleep、Timer 和 ScheduledExecutorService。第一种方法是使用 sleep,通过在死循环中添加 sleep 休眠逻辑,实现按照固定频率运行的定时任务。这种方式比较直接,但只能按固定频率运行,且在 JDK 8 中使用了 Lambda 表达式。第二种方法是使用 Timer 类,它在 JDK 1....

java定时任务的定时表达式,每天早晨6:是每个月的1号和15号执行任务
Java定时任务的定时表达式实现中,我们可以看到一个例子,展示了如何在每天早晨6点,以及每个月的1号和15号执行特定的任务。下面的代码片段展示了如何使用`java.util.Timer`和`TimerTask`类来实现这个需求:java public class MyTimer { public static void main(String[] args) { Timer timer1 = new...

java定时任务的定时表达式,每天早晨6:30执行任务,还有一个是...
Java定时任务的定时表达式,若需要每天早晨6:30执行任务,可以使用cron表达式“30 6 * * *”。另外,如果需要设置其他时间的定时任务,可以根据具体需求制定相应的cron表达式。1. 关于每天早晨6:30执行任务的定时表达式:- 在Java中,我们常常使用cron表达式来设置定时任务。对于每天早晨6:30执行...

给我5分钟,手把手带你学会Java中的定时任务!
在寻找快速实现Java中定时任务的简便方法时,Spring Task可能是你理想的解决方案。无需深入研究复杂工具如Quartz、XXL-Job或Elastic-Job,Spring Task以其简单易用性脱颖而出。只需短短5分钟,你便能掌握定时任务的精髓。定时任务,或任务调度,旨在按照设定的时间间隔或特定日期重复执行任务,比如自动备份...

如何实现定时任务- Java Timer\/TimerTask 源码解析
现在就来看一下java.util.Timer是如何实现这样的定时功能的。首先,我们来看一下一个使用demo 基本的使用方法:加入任务的API如下:可以看到API方法内部都是调用sched方法,其中time参数下一次任务执行时间点,是通过计算得到。period参数为0的话则表示为一次性任务。那么我们来看一下Timer内部是如何实现调度...

java定时任务怎么实现?
接入XXL-JOB的步骤包括:引入核心依赖、执行数据库脚本、配置管理界面、定制任务配置,以及使用注解编写定时任务。尽管XXL-JOB支持中心化的动态任务管理,但其接口使用体验有待优化,调度器和执行器之间的网络通信也至关重要。总结与展望<\/ 通过讲解Java定时任务的基础概念和XXL-JOB的接入实践,我们看到了它们...

用java写一个服务程序定时执行任务,该怎么设计
java定时任务Timer 关于定时任务,似乎跟时间操作的联系并不是很大,但是前面既然提到了定时任务,索性在这里一起解决了。设置定时任务很简单,用Timer类就搞定了。一、延时执行首先,我们定义一个类,给它取个名字叫TimeTask,我们的定时任务,就在这个类的main函数里执行。代码如下:package test;import ...

JAVA定时执行任务,每天定时几点钟执行任务
1.MyJob02 \/\/首先我们需要定义一个任务类,比如为MyJob02 ,\/\/该类需要继承Job类,然后添加execute(JobExecutionContext context)方法,在 \/\/这个方法中就是我们具体的任务执行的地方。\/\/由希望由调度程序执行的组件实现的接口 public class MyJob02 implements Job { Override public void execute(...

用java实现定时任务要稳定的。谁帮实现一下。 比如: 每天早上8点输出一 ...
如果是linux,可以使用linux的cron服务来每天8点运行你的程序 如果不是或者没有条件使用cron,可以考虑使用java的开源组件quartz,它完全支持cron表达式来声明定时任务,也易于和spring集成。楼上已经给出quartz的用法了。如果要纯粹自己写一个程序的话:public class Test { public static void main(String[...

相似回答