Board logo

标题: Java里timer执行定时任务 [打印本页]

作者: qingqing3721    时间: 2011-5-14 07:33     标题: Java里timer执行定时任务

java定时任务Timer 关于定时任务, 似乎跟工夫操作的联系并不是很大, 但是后面既然提到了定时任务, 索性在这里一同处置了。 设置定时任务很简单, 用Timer类就搞定了。 一、延时执行首先, 我们定义一个类, 给它取个名字叫TimeTask, 我们的定时任务, 就在这个类的main函数里执行。 代码如下:
  package test;
  import java. util. Timer;
  public class TimeTaskTest {
  public static void main(String[] args){ Timer timer = new Timer();
  timer. schedule(new Task(),  60 * 1000);
  }
  }
  解释一下上面的代码。 上面的代码实现了这样一个功能, 当TimeTask顺序启动当前, 过一分钟后执行某项任务。 很简单吧:先new一个Timer对象, 然后调用它的schedule办法, 这个办法有四个重载的办法, 这里我们用其中一个,
  public void schedule(TimerTask task, long delay)
  首先, 第一个参数第一个参数就是我们要执行的任务。 这是一个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(TimerTask task, long delay, long period)
  前两个参数就不必说什么了, 最后一个参数就是距离的工夫, 又是个long型的毫秒数(看来java里涉及到工夫的, 跟这个long是脱不了干系了), 比如我们希望上面的任务从第一次执行后, 每个一分钟执行一次, 第三个参数值赋60 * 1000就ok了。 三、指定执行工夫既然号称是定时任务, 我们肯定希望由我们来指定任务指定的工夫, 显然上面的办法就不中用了, 由于我们不晓得顺序什么工夫开始运行, 就没办法确定需要延时多少。 没关系, schedule四个重载的办法还没用完呢。 用上面这个就OK了:
  public void schedule(TimerTask task, Date time)
  比如, 我们希望定时任务2006年7月2日0时0分执行, 只需给第二个参数传一个工夫设置为2006年7月2日0时0分的Date对象就可以了。 有一种情况是, 可能我们的顺序启动的时候, 曾经是2006年7月3日了, 这样的话, 顺序一启动, 定时任务就开始执行了。 schedule最后一个重载的办法是public void schedule(TimerTask task, Date firstTime, long period)
  没必要说什么了吧四、j2ee中的定时任务在实践的项目中, 往往定时任务需要对web工程中的资源进行操作, 这样一来, 用上面的单个顺序的方式可能就有点力所能及了, 由于很多web工程的资源它操作不到。 处置的办法是, 使用Servlet, 把执行定时任务的那些代码放到Servlet的init()函数里就可以了, 这个easy, 就没有必要再写示例代码了吧文章由 suyin.tk 口碑最好的缩阴产品 整理,收集辛苦,希望能保留出处。




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0