• 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("结束已成功执行!!!");
    }
    }

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

  • 相关阅读:
    ffmpeg-3.2.4-static-win32-for-XP-bin.tar.xz
    FFmpeg Scaler Options
    MinGW GCC 6.3.0 2017年3月份出炉啦
    ffmpeg-201701[10,16,21,23,25]-bin.7z
    ffmpeg-201612[01,08,10,17,21,27,30]-bin.7z
    Firefox Portable Developer 52.0.0.6176-6178
    DIR 按文件名中数字大小进行排序
    ffmpeg-20161104[07,10,16,21,22,27,30]-bin.7z
    gnuWin32-mini-2016.10.30
    gnu coreutils-8.25 for win32 static
  • 原文地址:https://www.cnblogs.com/shenliang123/p/2433558.html
Copyright © 2020-2023  润新知