zoukankan      html  css  js  c++  java
  • 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("结束已成功执行!!!");
    }
    }

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

  • 相关阅读:
    redis命令
    linux命令行任务管理
    tomcat修改内存
    Python调用shell
    取消myeclipse自动进入workspace
    解决Myeclipse编译不生成.class文件问题
    Manacher回文串算法学习记录
    青少年如何使用 Python 开始游戏开发
    对 Linux 专家非常有用的 20 个命令
    对中级 Linux 用户非常有用的 20 个命令
  • 原文地址:https://www.cnblogs.com/shenliang123/p/2433558.html
Copyright © 2011-2022 走看看