import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContext;
public class OnLineUserDoTimer {
private ScheduledExecutorService scheduler = Executors
.newScheduledThreadPool(1);
public void executeTimer( final ServletContext application) {
Runnable task = new Runnable() {
public void run() {
removeUser(application); //調用操作實現方法
}
};
if (scheduler.isShutdown()) {
scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(task, 0, 60, TimeUnit.SECONDS);
} else {
scheduler.scheduleAtFixedRate(task, 0, 60, TimeUnit.SECONDS); // 延遲0,每隔60行一次
}
}
//停止任務,不再提交新任務,已提交任務會繼續執行以致完成
public void stop() {
scheduler.shutdown();
}
//刪除時間間隔超過指定值的用戶記錄
public void removeUser(ServletContext application){
Object o=application.getAttribute("OnLineUserList");
if(o!=null){
Map onLineUserList=(HashMap)o;
Set keys=onLineUserList.keySet();
Iterator lt=keys.iterator();
while(lt.hasNext()){
Object key=lt.next();
OnLineUser user=(OnLineUser)onLineUserList.get(key);
Date lasttime=user.getLastreqTime();
Date now=new Date();
int fz=(int)((now.getTime()-lasttime.getTime())/(1000*60));
if(fz>1){
onLineUserList.remove(key);
}
}
}
}
}