康老师

java中怎么实现定时功能

2017-02-11 分类:百科

TIPS:本文共有 1536 个字,阅读大概需要 4 分钟。

我们可以使用Timer和TimerTask类在java中实现定时任务,详细说明如下:

1、基础知识java.util.Timer一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。java.util.TimerTask由 Timer 安排为一次执行或重复执行的任务。

2、示例代码该示例实现这样一个功能,在系统运行期间,每30分钟,系统自动检查连接池中的可用连接数,并输出到日志中。首先创建一个需要定时执行的任务类,这个任务类需要继承TimerTask,然后重写run()方法,run()方法体中的代码就是定时需要执行的操作,在本demo中,就是获取连接池中当前可用连接数,并输出到日志中,具体实现代码如下:public class TaskAvailableConnectNumber extends TimerTask { private Logger log = Logger.getLogger(TaskAvailableConnectNumber.class) private ConnectionPool pool=ConnectionPool.getInstance() @Override publicvoid run() { log.debug("当前连接池中可用连接数"+pool.getAvailableConnectNumber()) }}下面定义一个监听器,负责在应用服务器启动时打开定时器,监听器需要实现ServletContextListener接口,并重写其中的contextInitialized()和contextDestroyed()方法,代码如下:public class OnLineListener implements ServletContextListener{ private Logger log = Logger.getLogger(OnLineListener.class) Timer timer = null //在应用服务器启动时,会执行该方法 publicvoid contextInitialized(ServletContextEvent arg0) { //创建一个定时器,用于安排需要定时执行的任务。 timer = new Timer() //为定时器安排需要定时执行的任务,该任务就是前面创建的任务类TaskAvailableConnectNumber,并指定该任务每30分钟执行一次。 timer.schedule(new TaskAvailableConnectNumber(), 0, 30*60*1000) log.debug("启动定时器") } //应用服务器关闭时,会执行该方法,完成关闭定时器的操作。public void contextDestroyed(ServletContextEvent arg0) { if(timer!=null){ timer.cancel()//关闭定时器 log.debug("-----定时器销毁--------") } }}监听器要想正常运行,需要在web.xml文件中进行配置,配置信息如下:<!-- 监听器配置开始 --> <listener> <listener-class> cn.sdfi.listen.OnLineListener </listener-class> </listener><!-- 监听器配置结束 -->以上步骤完成后,一个简单的定时器就算开发完成了。

小编精心整理的这篇内容:java中怎么实现定时功能,如果你看到此处请一定要收藏哦!

阅读剩余内容
网友评论
相关阅读
小编推荐