æ们å¯ä»¥ä½¿ç¨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>
<!-- çå¬å¨é
ç½®ç»æ -->
以ä¸æ¥éª¤å®æåï¼ä¸ä¸ªç®åçå®æ¶å¨å°±ç®å¼åå®æäºã