java定时器实现

这两天在重构代码,发现有几个map有出现内存泄露的问题。考虑到独立性,通过java 的timetask来实现。

这里要注意的地方就是任务起始时间的获得。

 

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;


/**
 * 定时清除类 防止内存泄露 每天清除一次 凌晨三点
 * 
 * @author franciscolv
 * 
 */
public class ScheduleTask extends TimerTask {
	
	private Timer timer = new Timer();
	private ZooKeeperController zkcontroller;
	private ZKAgentMain zkAgentMain;

	public ZKAgentMain getZkAgentMain() {
		return zkAgentMain;
	}

	public void setZkAgentMain(ZKAgentMain zkAgentMain) {
		this.zkAgentMain = zkAgentMain;
	}

	public void start() {
                //这里设置为凌晨三点执行
		Calendar date = Calendar.getInstance();
		date.set(Calendar.HOUR, 15);
		date.set(Calendar.MINUTE, 0);
		date.set(Calendar.SECOND, 0);
		date.set(Calendar.MILLISECOND, 0);
		Date time = date.getTime();
		timer.scheduleAtFixedRate(this, time, 1000 * 60 * 60 * 24);
		
	}

	@Override
	public void run() {
		//这里做定时任务的处理
	}

	

	public void setCalendar(Calendar calendar) {
		this.calendar = calendar;
	}

	public Calendar getCalendar() {
		return calendar;
	}

}

 

 

其实,Map类的缓存最好还是使用linkHashMap或者之类的带有LRU或者FIFO算法的Map来实现。

手写并发LRU Map值得推荐。等哪天有需求了,写一下。

你可能感兴趣的:(java)