问题描述
- 关于定时器操作的逻辑问题
- 我写了一个定时器,定时启动,进入死循环。循环第一步是取当前时间和数据库中规定的扫描时间,需求是如果在扫描时间的上下五分钟都需要执行扫描操作。如果当前时间符合要求就进行扫描,不匹配就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