java timer的用法,三步实现定时 - 极悦
首页 课程 师资 教程 报名

java timer的用法,三步实现定时

  • 2020-05-14 15:41:42
  • 2675次 极悦

第一步:编写测试类,该类extendsTimerTask,重新run()方法,run方法里面就是你要执行的逻辑代码,示例如下:

[java]viewplaincopyprint?
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.TimerTask;
publicclassMyTest1extendsTimerTask{
privateSimpleDateFormatsf=newSimpleDateFormat("yyyy-MM-ddhh:mm:ss");
@Override
publicvoidrun(){
System.out.println("现在时间是:"+sf.format(newDate()));
}
}

第二步:编写一个类,该类实现ServletContextListener接口

[java]viewplaincopyprint?
importjavax.servlet.ServletContextEvent;
importjavax.servlet.ServletContextListener;
publicclassTimerTaskManagerimplementsServletContextListener{
privateTimertimer;
@Override
publicvoidcontextInitialized(ServletContextEventsce){
System.out.println("程序定时执行任务.....................................");
MyTest1t=newMyTest1();
timer=newTimer("开始执行任务",true);
/*执行MyTest1中的run方法,t代表TimerTask的子类,0代表延迟0毫秒执行run方*法,1000表示每隔一秒执行一次run方法,后面两个参数可根据自己的需求而定义
*/
timer.schedule(t,0,1000);
}
@Override
publicvoidcontextDestroyed(ServletContextEventsce){
System.out.println("程序定时执行任务结束.....................................");
timer.cancel();
}
}

第三步:在web.xml中添加如下代码里面填写TimerTaskManager的路径,程序在web容器启动后会初始化加载TimerTaskManager的contextInitialized方法。

监听器添加方式:

加listener标签,listener里面加listener-class标签,listener-class标签里面内容为TimerTaskManager的路径,如:com.TimerTaskManager.

举例:

[html]viewplaincopyprint?
<listener>
<listener-class>weiming.lmapp.timer.SysContextListener</listener-class>
</listener>

相关注意点分析:

1.任务调度要优先考虑实时保证

由于Java的天性,并且在开发JDK的过程中要考虑到不同平台,而不同平台的线程调度机制是不同的,因此各种平台下JVM的线程调度机制也是不一致的。从而Timer不能保证任务在所指定的时间内执行。另外由于TimerTask是实现Runnable接口的,在TimerTask被放进线程队列睡眠一段时间(wait)之后,当到了指定的该唤起该TimerTask时,由于执行的确切时机取决于JVM的调度策略和当前还有多少线程在等待CPU处理。因此就不能保证任务在所指定的时间内执行。通常在如下两种情况下导致任务延迟执行:

(1)有大量线程在等待执行

(2)GC机制的影响导致延迟

这也是为什么在TimerAPI中存在两组调度方法的原因。即:

(1)schedule()

用固定延迟调度。使用本方法时,在任务执行中的每一个延迟会传播到后续的任务的执行。

(2)scheduleAsFixedRate()

用固定比率调度。使用本方法时,所有后续执行根据初始执行的时间进行调度,从而希望减小延迟。

具体使用哪一个方法取决于哪些参数对你的程序或系统更重要。

2.每个Timer对象要在后台启动一个线程。这种性质在一些托管的环境下不推荐使用,比如在应用服务器中。因为这些线程不在容器的控制范围之内了。

java timer的用法,三步实现定时

以上就是极悦java培训机构的小编针对“java timer的用法,三步实现定时”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交