文档章节

定时器工具----java

o
 osc_gu9d45li
发布于 2019/04/08 18:02
字数 508
阅读 12
收藏 0

精选30+云产品,助力企业轻松上云!>>>

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

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

 

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

1. 开启定时器;

2. 关闭定时器;

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

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

 

package com.mec.test;

public abstract class DidaDida implements Runnable{
    public static final long DELTATIME = 1000;
    private volatile Object lock;
    private volatile boolean goon;
    private long deltaTime;
    
    public DidaDida() {
        this.lock = new Object();
        deltaTime = DELTATIME;
    }

    public DidaDida setDeltaTime(long time) {
        this.deltaTime = time;                    
        return this;                               // 方便链式调用
    }
    
    public void startup() {
        if (goon == true) {                        //如果定时器已启动,则无需再次启动
            return;
        }
        goon = true;
        new DidaWorker();
        new Thread(this, "计时线程").start();
    }
    
    public void close() {
        if (goon == false) {                       //如果定时器已关闭,则无需再次关闭
            return;
        }
        goon = false;
    }

    public abstract void doIt();
    
    @Override
    public void run() {
        while (goon) {
            try {
                synchronized (lock) {
                    lock.wait(deltaTime);        // 以这种方式实现定时会更加准确
                    lock.notify();               // 这一步唤醒底下的DidaWorker类里的线程
                }
                
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    class DidaWorker implements Runnable{
        public DidaWorker() {
            new Thread(this).start();
        }

        @Override
        public void run() {
            while (goon) {
                synchronized (lock) {
                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                doIt();                          //执行用户操作
            }
        }
         
    }
    
    
}

 

Test类

public class test {

    public static void main(String[] args) {
        new DidaDida() {
            
            @Override
            public void doIt() {
                System.out.println(System.currentTimeMillis());
            }
        }.startup();
    }

}

 

结果:

1554717444528
1554717445529
1554717446529
1554717447529
1554717448529
1554717449529
1554717450529
1554717451530

最后一位是毫秒位。

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
SpringBoot2.0高级案例(06):整合 QuartJob ,实现定时器实时管理

一、QuartJob简介 1、一句话描述 Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大。 2、核心API (1)、Scheduler 代表一个 Quartz 的独立运行容器,Scheduler 将 Trigger ...

知了一笑
2019/07/21
217
3
Jmeter脚本增强--集合点

简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点 操作步骤:线程组/取样器>添...

osc_715mam6n
2018/09/04
1
0
【jmeter】JDBC请求循环调用的问题

今天使用jdbc请求从数据库取数据,多次请求使用了循环控制器,但是结果第一个jdbc请求返回值正确,第二次请求返回值为空。 1.从其他博客中得知,需要在jdbc connection configuration 的DBU...

qsx_suzy
04/21
0
0
作业调度哪种方式好,最终选了Quartz

随着云平台,大数据等的出现,用户或潜在访问者越来越想免费体验产品,特别是想申请系统(比如开虚拟机,启动docker等),可是系统硬件资源有限,那怎么才能让用户实际操作云平台资源呢,那就...

董广明
04/10
13
0
自动打印照片工具

软件说明: 1、支持打印1寸、2寸、3寸、5寸、6寸、7寸、8寸、10寸照片。 2、开发语言为 java 语言,源代码可以进行二次开发及扩展。 软件结构: 从上往下: action包中是定时任务与图片的显示...

singlewolf
2016/12/10
83
0

没有更多内容

加载失败,请刷新页面

加载更多

asp.net core之NLog

NuGet添加 NLog.Web.AspNetCore。 <PackageReference Include="Microsoft.AspNetCore.App" /> 添加配置文件 新建一个文件nlog.config(建议全部小写,linux系统中要注意), 并右键点击其属性......

一介草民Coder
46分钟前
23
0
.NET中的struct和class有什么区别? - What's the difference between struct and class in .NET?

问题: .NET中的struct和class有什么区别? 解决方案: 参考一: https://stackoom.com/question/3OT/NET中的struct和class有什么区别 参考二: https://oldbug.net/q/3OT/What-s-the-differ...

富含淀粉
今天
23
0
android:layout_weight是什么意思? - What does android:layout_weight mean?

问题: I don't understand how to use this attribute. 我不明白如何使用这个属性。 Can anyone tell me more about it? 谁能告诉我更多关于它的事情? 解决方案: 参考一: https://stacko...

javail
今天
17
0
CSS背景不透明度[重复] - CSS Background Opacity [duplicate]

问题: This question already has an answer here: 这个问题已经在这里有了答案: How do I give text or an image a transparent background using CSS? 如何使用CSS为文本或图像提供透明背...

fyin1314
今天
31
0
node http 获取gb2312网页如何转为utf8

最初,我想当然认为是下述做法,但被证明是错误的 const http = require('http'), iconv = require('iconv-lite');const url = 'http://xxx';http.get(url, function(res) { var bo......

高延
今天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部