定时任务TimerTask实现异步操作

1、创建任务管理器TaskManager

import java.util.TimerTask;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @ClassName:  TaskManager   
 * @Description:任务管理
 * @author: Ccl
 * @date:   2021年7月8日 上午10:23:33      
 * @Copyright:
 */
public class TaskManager {

    /** 延时*/
    private final int OPERATE_DELAY_TIME = 10;

    /** 操作线程池*/
    private ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(50);

    /** 单例*/
    public static TaskManager manager = new TaskManager();

    private TaskManager() {

    }
    
    /** 获取唯一实例*/
    public static TaskManager get() {
        return manager;
    }

    /** 执行定时任务,默认延迟 OPERATE_DELAY_TIME*/
    public void execute(TimerTask task) {
        execute(task,OPERATE_DELAY_TIME);
    }

    /** 执行定时任务,手动设置延迟*/
    public void execute(TimerTask task, int delay) {
        executor.schedule(task, delay, TimeUnit.MILLISECONDS);
    }
}

2、创建任务工厂接口类TransferTaskService

/**
 * @ClassName:  TransferTaskService   
 * @Description: 任务工厂接口类
 * @author: Ccl
 * @date:   2021年7月8日 上午10:26:27      
 * @Copyright:
 */
public interface TransferTaskService {
    
    /** 生成中转费*/
    public TimerTask createTransferOrderAmt(Integer orderId,ScuserTicket ticket);
    
}

3、实现任务工厂接口

@Service("transferTaskService")
public class TransferTaskServiceImpl implements TransferTaskService{
    
    @Autowired
    OrderTransferService orderTransferService;

    @Override
    public TimerTask createTransferOrderAmt(Integer orderId,ScuserTicket ticket) {
        // TODO Auto-generated method stub
        return new TimerTask() {
            @Override
            public void run() {
                orderTransferService.createTransferOrderAmt(orderId,ticket);//具体操作
            }
        };
    }
}

4、调用

//生成中转费,延迟1秒执行
TaskManager.get().execute(transferTaskService.createTransferOrderAmt(entity.getOrderId(), ticket),1000);

 

posted @ 2022-05-11 11:43  Change你所当然  阅读(359)  评论(0)    收藏  举报