Создание задач таймера
Стратегии создания задач
Определение TimerTask
В Java создание задач таймера включает в себя наследование от абстрактного класса TimerTask
или использование анонимных внутренних классов. Существует несколько подходов к реализации задач таймера:
graph TD
A[TimerTask Creation] --> B[Extend TimerTask Class]
A --> C[Anonymous Inner Class]
A --> D[Lambda Expression]
Базовая реализация TimerTask
Метод 1: Наследование от класса TimerTask
import java.util.Timer;
import java.util.TimerTask;
public class CustomTimerTask extends TimerTask {
@Override
public void run() {
System.out.println("Custom task executed");
}
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new CustomTimerTask(), 1000);
}
}
Метод 2: Анонимный внутренний класс
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Anonymous task executed");
}
}, 1000);
Метод 3: Лямбда-выражение (Java 8+)
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Lambda-style task");
}
}, 1000);
Типы планирования задач
Тип задачи |
Метод |
Описание |
Одноразовая с задержкой |
schedule(task, delay) |
Выполняет задачу один раз после указанной задержки |
Одноразовая в определенное время |
schedule(task, date) |
Выполняет задачу в определенную дату/время |
Периодическая с фиксированной частотой |
scheduleAtFixedRate(task, delay, period) |
Повторяет задачу с фиксированным интервалом |
Периодическая с фиксированной задержкой |
scheduleAtFixedDelay(task, delay, period) |
Повторяет задачу с фиксированной задержкой между выполнениями |
Пример продвинутого планирования задач
import java.util.Timer;
import java.util.TimerTask;
public class AdvancedTimerDemo {
public static void main(String[] args) {
Timer timer = new Timer();
// Periodic task with fixed rate
timer.scheduleAtFixedRate(new TimerTask() {
private int count = 0;
@Override
public void run() {
count++;
System.out.println("Periodic task: " + count);
// Cancel after 5 executions
if (count >= 5) {
cancel();
}
}
}, 1000, 2000); // Initial delay: 1 second, Period: 2 seconds
}
}
Отмена и управление задачами
Отмена задач
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("Cancellable task");
}
};
timer.schedule(task, 1000);
task.cancel(); // Cancels the specific task
Лучшие практики
- Избегайте длинно выполняющихся задач в
TimerTask
- Обрабатывайте исключения внутри метода
run()
- Используйте
Timer.cancel()
для остановки всех запланированных задач
- Рассмотрите возможность использования
ScheduledExecutorService
для сложного планирования
В LabEx мы рекомендуем понять эти техники создания задач для построения надежных механизмов планирования в ваших Java-приложениях.