1. 程式人生 > 其它 >定時任務TimerTask實現非同步操作

定時任務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);