美文网首页
定时任务timer的简单用法

定时任务timer的简单用法

作者: bboymonk | 来源:发表于2017-09-08 14:29 被阅读0次
    import java.util.Timer;
    import java.util.TimerTask;
    /**
         * 分配一个定单
         * @return
         */
        @ResponseBody
        @GetMapping("getTask")
        public BaseResult getTask(HttpSession session){
            try {
                Task task = taskService.getTask();
                ShiroUser user = getUser();
                task.setLogs(user.getUsername());
                taskService.recordLog(task);
                //如果5分钟没有返回余额,就把此任务作废
                tempTask = task;
                doTimer();
                return new BaseResult(true,"success",task);
            } catch (Exception e) {
                e.printStackTrace();
                return new BaseResult(false,"query error",null);
            }
        }
    
        /**
         * 5分钟内如果没有回传余额,分配的定单作废,status=0,logs=''
         * @return
         */
         private static final Timer timer = new Timer();
        public void doTimer(){       
            timer.schedule(new RemindTask(), 300000);
        }
    
        class RemindTask extends TimerTask{
            @Override
            public void run() {
                Task t2 = taskMapper.selectByPrimaryKey(tempTask.getId());
                if (tempTask.getAmount().equals(t2.getAmount())){
                    tempTask.setLogs("");
                    tempTask.setStatus(0);
                    taskService.updateAmout(tempTask);
                    timer.cancel();
                }
            }
        }
    

    timer对于多线程来说不安全,如果有一个线程异常,其它的都不会执行。建议用ScheduledExcutorService。

    需要注意的是timer.cancel()方法是终止这个线程的。timer.schedule()方法是设置时间的,具体可以百度。这是是设置5分钟后执行。

    相关文章

      网友评论

          本文标题:定时任务timer的简单用法

          本文链接:https://www.haomeiwen.com/subject/cowgjxtx.html