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值得推荐。等哪天有需求了,写一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值