• java 计时器timer的使用


    前段时间在做一个考试系统时候,遇到一个问题,发起一系列的考试后,要满足一个需求,就是能够设定时间来批量开始和结束一些列的考试,这里就想到使用timer了,

    前台的代码就省略不写了,这里只讨论timer的使用

    以下的方法autoOperatorExam(String idStr, String time, String type);三个参数分别是批量处理的id,设定的时间,类型(即是开始操作还是结束操作);

    //自动开始结束考试
    public void autoOperatorExam(String idStr, String time, String type){
    String[] ids = idStr.split("-");
    for(String id: ids){
    examDAO.updateExamTime(Integer.valueOf(id), time, type);
    /*
    * 此处采用计时器来代替线程的等待
    * 如果使用线程,必须要将线程的任务全执行完后才能向下执行,而计时器实现了后台
    * 执行的功能
    *
    */
    Timer timer = new Timer();
    //计算时间的间隔
    String timeStr = null;
    try {
    timeStr = FormatDate.examRemainTime(FormatDate.getFormateDateAll(), time);
    } catch (ParseException e) {
    System.out.println("计算时间差出错!!");
    e.printStackTrace();
    }
    //System.out.println(timeStr);
    String[] timeString = timeStr.split("#");
    Integer timeSpace = (Integer.valueOf(timeString[0])*60)+Integer.valueOf(timeString[1]);
    System.out.println("时间的间隔是=" +timeSpace);
    if("开始时间".equals(type)){
    //这里通过构造方法将参数传递给run()方法
    timer.schedule(new autoUpdateStatusStart(Integer.valueOf(id)), (Integer.valueOf(timeSpace)*1000));
    }else if("结束时间".equals(type)){
    timer.schedule(new autoUpdateStatusEnd(Integer.valueOf(id)), (Integer.valueOf(timeSpace)*1000));
    }

    }

    }

    这里面看实例化了autoUpdateStatusStart();和autoUpdateStatusEnd();通过实例化可以将参数传递给内部方法run();

    //计时器的具体任务操作,开始考试
    public class autoUpdateStatusStart extends TimerTask{
    private int taskID = 0; //任务id
    public autoUpdateStatusStart(int ID){ this.taskID = ID;
    }
    public void run() {
    System.out.println("开始考试的考生id= " + taskID);
    Exam exam = examDAO.getExamById(taskID);
    exam.setExamStatus("开始");
    exam.setExamStartime("已生效!!");
    examDAO.update(exam);

    System.out.println("开始已成功执行!!!");
    }
    }
    //结束考试的run操作
    public class autoUpdateStatusEnd extends TimerTask{
    private int taskID = 0; //任务id
    public autoUpdateStatusEnd(int ID){ this.taskID = ID;
    }
    public void run() {
    System.out.println("结束考试的考生id= "+taskID);
    Exam exam = examDAO.getExamById(taskID);
    exam.setExamStatus("结束");
    exam.setExamEndtime("已生效!!");
    examDAO.update(exam);
    System.out.println("结束已成功执行!!!");
    }
    }

    这样程序就能在后台进行时间的控制执行所要的操作

  • 相关阅读:
    Activiti流程实例
    Activiti使用步骤 (IDEA)
    工作流简介
    并发编程常见面试题
    navicat自动备份数据,可实现每天定时备份
    MySQL, SQLite 和 PostgreSQL 关于information_schema 的一些查询(表结构,表信息,库信息....)
    GIS相关网站下载全国的GeoJSON格式数据可以到区县级数据
    GIS当中使用uDig打开shp图层,并查看数据结果
    解决Failed to execute goal org.apache.maven.plugins 错误,JDK版本不一致
    Maven插件maven-assembly-plugin进行打包部署
  • 原文地址:https://www.cnblogs.com/shenliang123/p/2433558.html
Copyright © 2020-2023  润新知