java 自动功能实现_java中实现定时功能

网上资料:

我们可以使用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文件中进行配置,配置信息如下:

cn.sdfi.listen.OnLineListener

以上步骤完成后,一个简单的定时器就算开发完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值