美文网首页
定时任务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