`
betafox
  • 浏览: 146892 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

超轻量的定时器

阅读更多
项目中一个特殊要求,需要轻量的定时器程序,所以简单实现了一个:

核心执行器:
public class TaskExcuter {

    public static final TaskExcuter instance = new TaskExcuter();

    private List tasks = new ArrayList();

    private long step;
    private long times;

    private void init() throws Exception {

        Properties config = new Properties();
        config.load(TaskExcuter.class.getResourceAsStream("timer.config"));

        step = Long.parseLong(config.getProperty("step"));

        times = Long.parseLong(config.getProperty("times"));

        Enumeration names = config.propertyNames();
        while (names.hasMoreElements()) {
            String name = ((String) names.nextElement()).trim();

            if (name.toLowerCase().startsWith("task")) {
                String clazz = config.getProperty(name);

                try {
                    ITask task = (ITask) Class.forName(clazz).newInstance();
                    task.setName(name.split("/")[1]);
                    tasks.add(task);
                }
                catch (InstantiationException e) {
                    e.printStackTrace();
                }
                catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    private void start() {
        new Thread(new Runnable() {
            public void run() {
                long i = 0;
                while (i <= times||times==-1) {
                    try {
                        Thread.sleep(step);
                    }
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    Date taskTimer = new Date();

                    for (Iterator iterator = tasks.iterator(); iterator.hasNext();) {
                        ITask task = (ITask) iterator.next();
                        task.setTaskTimer(taskTimer);
                        boolean state = task.willExcute();
                        if (state) {
                            log("开始执行计划任务["+i+1+"]:" + task.getName());

                            try {
                                boolean ex = task.excute();
                                if (ex) {
                                    log("[" + task.getName() + "]执行成功~!");
                                } else {
                                    log("[" + task.getName() + "]执行失败~!");
                                }
                            }
                            catch (TaskException e) {
                                e.printStackTrace();
                                log("[" + task.getName() + "]执行失败~!" + e);
                            }
                        }
                    }
                    System.gc();
                    i++;
                }

            }
        }).start();
    }
    
    private SimpleDateFormat ft=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

    private void log(String msg) {
        Date d = new Date();
        msg = ft.format(d) + "-->>" + msg;
        System.out.println(msg);
    }

    public static void main(String[] args) throws Exception {
        TaskExcuter.instance.init();
        TaskExcuter.instance.start();
    }

}


任务接口:
public abstract class ITask {

    private String name;
    private Date TaskTimer;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getTaskTimer() {
        return TaskTimer;
    }

    public void setTaskTimer(Date taskTimer) {
        TaskTimer = taskTimer;
    }

    public abstract boolean willExcute();

    public abstract boolean excute() throws TaskException;

}


示例实现:
public class DemoTaskImpl extends ITask {

    public boolean willExcute() {
        Date d = getTaskTimer();

//        if (d.getDate() == 20) {
//            return true;
//        }
        return true;
    }

    public boolean excute() throws TaskException {

        System.out.println("-------------ok");
        return true;
    }
}


配置:
step=10000
times=-1
task/demo=com.**.timer.DemoTaskImpl
task/wiki_index=com.**.service.IndexTaskImpl
分享到:
评论

相关推荐

    中文识别超轻量推理模型

    标题中的“中文识别超轻量推理模型”是指用于识别中文字符的一种高效、小型化的机器学习模型,主要用于文本检测和识别任务。在当前的AI领域,这样的模型被广泛应用于各种场景,如智能办公、文档处理、图像扫描等,...

    一款超轻量、高性能、跨平台的嵌入式脚本语言,可以运行在Windows、Linux、MCU上

    一款超轻量、高性能、跨平台的嵌入式脚本语言,可以运行在Windows、Linux、MCU上。致力于打造一款开源、高效、强大的编程语言一款超轻量、高性能、跨平台的嵌入式脚本语言,可以运行在Windows、Linux、MCU上。致力于...

    超轻量日志类

    "超轻量日志类"是一个专为C++设计的轻便型日志处理库,旨在提供高效且低开销的日志记录功能。在这个话题下,我们将深入探讨C++的日志实现、Visual Studio (VS) 集成以及轻量化设计的考量。 首先,让我们了解C++中的...

    基于AIO的超轻量HTTP服务器实现

    标题 "基于AIO的超轻量HTTP服务器实现" 指的是使用异步I/O(Asynchronous Input/Output,简称AIO)模型构建一个轻量级的HTTP服务器。AIO在Java中通常指的是NIO.2(New I/O 2),它提供了非阻塞I/O操作,能够更有效地...

    中文识别超轻量训练模型

    标题中的“中文识别超轻量训练模型”是指一种专门用于识别中文字符的深度学习模型,其特点是模型体积小,计算效率高,适用于资源有限的设备上进行实时或近实时的文字识别任务。这样的模型通常采用深度学习框架,如...

    中文检测超轻量推理模型

    标题中的“中文检测超轻量推理模型”是指一种专门用于识别和检测中文文本的轻量化机器学习或深度学习模型,这种模型在处理中文文本时,能够进行高效的推理和分析。在现代信息技术中,这种模型被广泛应用在自然语言...

    中文检测超轻量训练模型

    标题中的“中文检测超轻量训练模型”指的是一个专门用于识别和检测中文字符的轻量化机器学习或深度学习模型。这种模型的特点在于其小巧的体积,可以在资源有限的设备上运行,同时保持高效的性能。在现代信息技术中,...

    中英文超轻量PP-OCRv4模型

    【标题】"中英文超轻量PP-OCRv4模型" 涉及的核心知识点是光学字符识别(Optical Character Recognition, OCR)技术,特别是针对中文和英文的高效率、低资源消耗的模型设计。PP-OCRv4是PaddleOCR项目的一个重要版本,...

    GuiLite超轻量UI框架 v3.6.zip

    GuiLite超轻量UI框架 v3.6.zip

    基于超轻量通道注意力的端对端语音增强方法.docx

    ### 基于超轻量通道注意力的端对端语音增强方法 #### 一、引言及背景 语音增强技术旨在提升目标语音的清晰度,去除背景噪声,这对于提高通信质量和效率至关重要。人类能轻松从嘈杂环境中识别出重要信息,而机器...

    Node.js-超轻量NPM包脚手架

    标题 "Node.js-超轻量NPM包脚手架" 提到的是一个专注于Node.js开发的工具,它致力于简化创建和管理NPM包的过程。在Node.js生态系统中,NPM(Node Package Manager)是用于管理和分发模块的平台,允许开发者共享和...

    fastn, 创建超轻量用户界面组件.zip

    fastn, 创建超轻量用户界面组件 fastN创建超轻量用户界面组件 例如的主页,尝试它,例如示例应用程序用法创建fastN组件所需的绝对最小值:使用默认的DOM组件初始化 fastN:var fastn = require('fastn')

    超轻量tcp实现源码【原创】

    超轻量级别的tcp协议实现框架 1、完全使用c语言编写,方便移植到windows以及linux 2、支持多sock以及并发处理 3、网络顶层接口定义简单,方便替换 4、测试代码为windows xp下,网络接口使用xfirewall.sys,局域网...

    一款超轻量高性能跨平台的嵌入式脚本语言可以运行在WindowsLinuxMCU上致力于打造一款开源高效强大的编程语言

    一款超轻量、高性能、跨平台的嵌入式脚本语言,可以运行在Windows、Linux、MCU上。致力于打造一款开源、高效、强大的编程语言。洛书(Losu) 编程语言,全称 Language Of Systemd Units ,超轻量、跨平台、易扩展、...

    一款超轻量、高性能、跨平台的嵌入式脚本语言

    标题中的“一款超轻量、高性能、跨平台的嵌入式脚本语言”指的是一个专为嵌入式系统设计的轻量级、高效且能在多种操作系统上运行的脚本引擎。这种脚本语言通常用于设备控制、自动化任务、游戏逻辑等场景,允许开发者...

    bashjumper是一个基于linux_bash的命令行下的超轻量跳板机。_bashjumper.zip

    bashjumper是一个基于linux_bash的命令行下的超轻量跳板机。_bashjumper

    GuiLite超轻量UI框架 v3.6-源码.zip

    GuiLite超轻量UI框架是面向嵌入式设备和物联网(IoT)应用设计的一款高效、小巧且易于使用的用户界面库。它旨在提供简洁的API和极低的内存占用,以便在资源有限的硬件上实现丰富的图形用户界面。版本v3.6带来了更多的...

    MegCC是一个运行时超轻量,高效,移植简单的深度学习模型编译器_MegCC.zip

    MegCC是一个运行时超轻量,高效,移植简单的深度学习模型编译器_MegCC

    python 超轻量openpose源码,能实时对人体进行姿态检测

    "超轻量"的特性意味着Python OpenPose在保持高效率的同时,对硬件资源的需求较低。这使得它能在各种设备上实现实时姿态检测,包括嵌入式设备和低配PC,极大地拓宽了其应用范围。 ### 4. 安装与配置 安装Python ...

    cpp-TinyhttpdC语言写的一个不到500行的超轻量型HTTP服务器

    C语言写的Http Server,J. David Blackstone在1999年写的一个不到 500 行的超轻量型HTTP服务器Http Server。

Global site tag (gtag.js) - Google Analytics