定时任务timer的简单用法

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的简单用法)