После покупки товара в электронной коммерции, если заказ размещен без оплаты, обычно предлагается завершить оплату в течение 30 минут, в противном случае заказ будет автоматическим. Например, размещение заказа на Jingdong для завершения платежа:
Если он превышает 24 часа, заказ будет автоматически отменен.Следующее использует таймер Java для реализации функции отмены заказа по времени.
- Таймер таймер
Таймер — это инструмент для планирования выполнения задач. Задачи могут выполняться одновременно или многократно. Система запускает поток для выполнения всех задач синхронизации.
- Задача синхронизации TimerTask
TimerTask — это абстрактный класс, реализующий Runnable, а реализация Runnable означает создание многопоточных задач.
Создать задачу таймера
TimerTask — это абстрактный класс. Абстракция предназначена для повторного использования кода. Чтобы создать класс, наследующий TimerTask:
public class CancelOrderTimeTask extends TimerTask {
private Long id;
public CancelOrderTimeTask(long id) {
this.id = id;
}
@Override
public void run() {
// 执行取消订单
cancelOrder(id);
System.out.println(getCurrentTime() + " 时间取消订单,订单id:" + id);
}
private String getCurrentTime() {
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
return sdf.format(date);
}
}
существуетrun
способ выполнения задачи отмены заказа.
Поскольку этот метод не создает bean-компонент, при вызове dao или других bean-компонентов используйте
ApplicationContext
Возьми фасоль.
Таймер таймера вызывает TimerTask
Создайте новый таймер и вызовите его с помощью метода schedule.Метод имеет два параметра: первый — это экземпляр задачи, а другой — время задержки для вызова задачи в миллисекундах. код показывает, как показано ниже:
@RestController
public class TimerController {
@GetMapping("/timer")
public String timer(long id) {
Timer timer = new Timer();
CancelOrderTimeTask timeTask = new CancelOrderTimeTask(id);
System.out.println("当前时间是" + getCurrentTime());
//10秒后执行任务
timer.schedule(timeTask,10 * 1000);
return "ok";
}
private String getCurrentTime() {
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
return sdf.format(date);
}
}
После вызова метода консоль выводит следующее содержимое, указывающее, что вызов синхронизации выполнен успешно.
当前时间是2022-01-24 00:05:09
2022-01-24 00:05:19 时间取消订单,订单id:3
Суммировать
- Сначала создайте запланированную задачу, наследуйте TimerTask и напишите бизнес-логику в методе запуска.
- Используйте Timer для вызова метода расписания, который записывает экземпляр TimerTask вместе с временем задержки.
исходный код
Если вы считаете, что статья была вам полезна, ставьте лайк!