java 定时器 内存_定时器工具----java

在c/s framework中添加一个检测客户端连接是否有效的功能是必要的。我通过在服务器端设置一个临时连接池,在规定时间内,接入临时连接池的客户端做出了服务器端要求它做的动作,我再把它接入正式池,否则直接断开和他的连接。因为目前我的c/s还在初级阶段,依旧采用长连接的方式,添加这个功能避免了恶意连接,可以节省内存资源。

我从这个大的功能里拿出一个小的片段----定时功能,分析后觉得有必要将其写成工具。

下面我来列举我的定时器工具它要做哪些事情:

1. 开启定时器;

2. 关闭定时器;

3. 根据用户制定的时间准确定时,时间到,应完成用户指定的功能。(考虑用抽象类或接口方式实现);

注意:定时应该是多次的,不是一次的,结束应由用户调用关闭定时器方法来结束。

packagecom.zss.util;public abstract class DidaDida implementsRunnable{public static final long DELTATIME = 1000;private volatileObject lock;private volatile booleangoon;private longdeltaTime;publicDidaDida() {this.lock = newObject();

deltaTime=DELTATIME;

}public DidaDida setDeltaTime(longtime) {this.deltaTime =time;return this; //方便链式调用

}public voidstartup() {if (goon == true) { //如果定时器已启动,则无需再次启动

return;

}

goon= true;newDidaWorker();new Thread(this, "计时线程").start();

}public voidclose() {if (goon == false) { //如果定时器已关闭,则无需再次关闭

return;

}

goon= false;

}public abstract voiddoIt();

@Overridepublic voidrun() {while(goon) {try{synchronized(lock) {

lock.wait(deltaTime);//以这种方式实现定时会更加准确

lock.notify(); //这一步唤醒底下的DidaWorker类里的线程

}

}catch(InterruptedException e) {

e.printStackTrace();

}

}

}class DidaWorker implementsRunnable{publicDidaWorker() {new Thread(this).start();

}

@Overridepublic voidrun() {while(goon) {synchronized(lock) {try{

lock.wait();

}catch(InterruptedException e) {

e.printStackTrace();

}

}

doIt();//执行用户操作

}

}

}

}

Test类

public classtest {public static voidmain(String[] args) {newDidaDida() {

@Overridepublic voiddoIt() {

System.out.println(System.currentTimeMillis());

}

}.startup();

}

}

结果:

1554717444528

1554717445529

1554717446529

1554717447529

1554717448529

1554717449529

1554717450529

1554717451530

最后一位是毫秒位。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值