- 论坛徽章:
- 0
|
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 淘宝缩阴产品排行榜 整理,收集辛苦,希望能保留出处。 |
|