定時任務TimerTask實現非同步操作
阿新 • • 發佈:2022-05-11
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 staticTaskManager 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);