关于定时器操作的逻辑问题

问题描述

关于定时器操作的逻辑问题
我写了一个定时器,定时启动,进入死循环。循环第一步是取当前时间和数据库中规定的扫描时间,需求是如果在扫描时间的上下五分钟都需要执行扫描操作。如果当前时间符合要求就进行扫描,不匹配就sleep10秒钟。现在问题是假如符合条件了扫描一次,我怎样让扫描器在这个扫描时间段内不再重复扫描?

 public void run(){        while(true){            try {                boolean flag;                flag=new MyTimerTask().getTime();                if(true==flag){                    new Thread(new dataCollection()).start();                }                Thread.sleep(10*1000);            } catch (InterruptedException e) {                // TODO 自动生成的 catch 块                e.printStackTrace();            }        }    }    /***     *  匹配当前时间和数据库设定的扫描点,上下五分钟之内执行扫描     * @return flag     */    public boolean getTime(){        boolean flag=false;        try {            //从数据库获取时间,获取当前时间,算出两者差值     前面的时间减去后面的时间            JDBCUtil util=new JDBCUtil();            String sql = ""select scantime from tbl_code_scantime"";            List<Date> dateList;            Map<StringLong> map=new HashedMap();            dateList=util.executeQueryForList(sql);                for (int i=0;i<dateList.size();i++) {                    map=DateUtil.getDiff(new Date() dateList.get(i));                    //如果取得的时间在扫描点的上下五分钟之内,则启动扫描                    if(map.get(""countMinute"")<5||map.get(""countMinute"")>-5){                        System.out.println(""启动扫描器"");                         flag=true;                    }                }        } catch (SQLException e) {            // TODO 自动生成的 catch 块            e.printStackTrace();        }        return flag;    }
时间: 2024-12-30 23:40:23

关于定时器操作的逻辑问题的相关文章

c# 使用timer定时器操作,上次定时到了以后,下次还未执行完怎么处理

c# 使用timer定时器操作,下次定时到了以后,上次还未执行完怎么办 ------解决方案--------------------------------------------------------开始的时候,禁用定时器,你可以在执行完毕之后再启用定时器   定时器定时执行某一个方法时,可能由于执行的时间长要比间隔的时间长,则这种情况可能导致线程并发性的问题.建议加上Lockprivate static object LockObject = new Object();private st

HDFS追本溯源:HDFS操作的逻辑流程与源码解析

本文主要介绍5个典型的HDFS流程,这些流程充分体现了HDFS实体间IPC接口和stream接口之间的配合. 1. Client和NN       Client到NN有大量的元数据操作,比如修改文件名,在给定目录下创建一个子目录,这些操作一般只涉及Client和NN的交互,通过IPC调用ClientProtocol进行.创建子目录的逻辑流程如下图:       从图中可见,创建子目录这种操作并没有涉及DN.因为元数据会被NN持久化到edits中,因此在持久化结束之后,这个调用就会被成功返回.复习

浅谈Node.js中的定时器

  本文给大家分享的是Node.js中的定时器的相关资料,十分的全面细致,有需要的小伙伴可以参考下. Node.js中定时器的实现 上一篇博文提到,在Node中timer并不是通过新开线程来实现的,而是直接在event loop中完成.下面通过几个JavaScript的定时器示例以及Node相关源码来分析在Node中,timer功能到底是怎么实现的. JavaScript中定时器功能的特点 无论是Node还是浏览器中,都有setTimeout和setInterval这两个定时器函数,并且其工作特

让你提前认识软件开发(21):C程序中的定时器

第1部分 重新认识C语言 C程序中的定时器   [文章摘要]         在实际的C程序中,一个模块执行多个操作是很常见的事情.如果多个操作同时进行,会出现程序效率低下.计算机CPU占用率过高等情况,这时就需要对所有操作的执行顺序作一个合理的安排,这就涉及到定时器的使用.         本文对C程序中的定时器的类型.设置和清除方法等作了详细的介绍,为相关开发工作的开展提供了参考. [关键词]         C程序  定时器  操作  开发   一.定时器的定义及分类         我们

浅谈Node.js中的定时器_node.js

Node.js中定时器的实现 上一篇博文提到,在Node中timer并不是通过新开线程来实现的,而是直接在event loop中完成.下面通过几个JavaScript的定时器示例以及Node相关源码来分析在Node中,timer功能到底是怎么实现的. JavaScript中定时器功能的特点 无论是Node还是浏览器中,都有setTimeout和setInterval这两个定时器函数,并且其工作特点基本相同,因此下面仅以Node为例进行分析. 我们知道,JavaScript中的定时器并不同于计算机

Oracle DG Linux平台逻辑Standby的创建实例

oracle,平台,linux,数据库,archive,sql 操作系统:linux redhat 4.7 Oracle: 10.2.0.1 主库:orcl_pd 备库:LGDG 一.逻辑Standby创建过程 1.创建物理Standby 具体的参考: Oracle Data Guard Linux 平台 Physical Standby 搭建实例 简单的做如下几点提示: (1)初始化参数配置 初始化参数的修改并不仅仅只是在待创建的Standby数据库端创建,当前的Primary数据库甚至同一个

J2ME:定时器(TimerTask)使用及初探

最近完成个J2ME游戏,一直以来总想写点东西给大家~因为以前总是在索取,现在把J2ME的入门知识-定时器的相关知识以及我的一点体会-付出给大家,内容不多只是它的使用,希望对入门的J2ME开发者有所帮助. 首先,说下定时器的基本使用,以下内容摘自NOKIA 论坛里的一篇文章: <为60系列平台设计Java应用>--定时器 各种定时器让各种应用能方便地规划任务,而不必对线程进行调配.使用线程通常需要更为复杂的设计,并需要更多的系统资源,对各种小设备而言,比较奢侈. 创建一个定时器的范例: publ

LVM的创建,修改大小,删除以及彻底卸载的操作步骤

首先解释一下几个关键词 pv: physical volume 物理卷,就是用物理磁盘组成的卷,要在物理磁盘上创建. vg:volume group卷组,就是物理卷组成的卷组合,要在物理卷基础上创建. lv:logical volume逻辑卷,可以理解为逻辑可动态分配的磁盘空间,要在卷组上创建. 所以lvm的创建顺序就是,物理磁盘分区(也可以不分区),在物理分区上创建pv,在pv上创建vg,在vg上创建lv,然后格式化lv挂载使用 ok,下面具体来操作一下逻辑卷的创建以及空间扩容和删除 我们使用

Storm实时计算:流操作入门编程实践

Storm是一个分布式是实时计算系统,它设计了一种对流和计算的抽象,概念比较简单,实际编程开发起来相对容易.下面,简单介绍编程实践过程中需要理解的Storm中的几个概念: Topology Storm中Topology的概念类似于Hadoop中的MapReduce Job,是一个用来编排.容纳一组计算逻辑组件(Spout.Bolt)的对象(Hadoop MapReduce中一个Job包含一组Map Task.Reduce Task),这一组计算组件可以按照DAG图的方式编排起来(通过选择Stre