定时器的使用
在实际应用中,我们经常会遇到定时执行某个操作的情况,比如定时检查
数据库连接池中的连接数,每晚定时备份数据等,在 java 中,提供了这么两个
类,可以帮你完成这些定时操作。
java.util.Timer
一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期
重复执行。此类是线程安全的:多个线程可以共享单个 Timer 对象而无需进行外部同步。
java.util.TimerTask
由 Timer 安排为一次执行或重复执行的任务。
如何通过这两个类来完成定时操作功能呢?具体是使用方法,下面通过一个具体 demo 来
进行说明。
本 demo 实现这样一个功能,在系统运行期间,每 30 分钟,系统自动检查连接池中的可用
连接数,并输出到日志中。
首先创建一个需要定时执行的任务类,这个任务类需要继承 TimerTask,然后重写
run()方法,run()方法体中的代码就是定时需要执行的操作,在本 demo 中,就是获取
连接池中当前可用连接数,并输出到日志中,具体实现代码如下:
publicclassTaskAvailableConnectNumberextendsTimerTask {
privateLoggerlog=
Logger.getLogger(TaskAvailableConnectNumber.class);
privateConnectionPoolpool=ConnectionPool.getInstance();
@Override
publicvoidrun() {
log.debug("当前连接池中可用连接
数"+pool.getAvailableConnectNumber());
}
}
下面定义一个监听器,负责在应用服务器启动时打开定时器,监听器需要
实现 ServletContextListener 接口,并重写其中的 contextInitialized()和
contextDestroyed()方法,代码如下:
publicclassOnLineListenerimp lementsServletContextListener{
privateLoggerlog= Logger.getLogger(OnLineListener.class);
评论0
最新资源