Я знаю, что есть много платформ для Планировщика, а также собственный Планировщик JDK. Я не могу использовать сторонние фреймворки / API. Существующий планировщик использует только Java API. Это выглядит следующим образом: -
public class Timer implements Runnable {
private Thread runner;
private int pause;
private Task task;
private boolean running;
public Timer(int pause, Task task) {
this.pause = pause;
this.task = task;
runner = new Thread(this, "Timer");
}
public void run() {
try {
while (running) {
task.run(); // long running task
synchronized (runner) {
runner.wait(pause);
}
}
} catch (InterruptedException ie) {
/* The user probably stopped the */
}
}
Интерфейс и класс: -
public interface Task {
void run();
}
public class TaskManager implements Task {
private static boolean firstRun = true;
private static Timer timer;
private static String lastRun;
public static void start(int interval) {
// stop any previous
if (timer != null) {
timer.stopTimer();
timer = null;
}
// Start a new one
TaskManager taskManager = new TaskManager ();
timer = new Timer(interval * 1000, taskManager );
timer.startTimer();
}
public void run() {
// long running code
}
public void setDelay(int p) {
pause = p;
}
public void startTimer() {
running = true;
runner.start();
}
public void stopTimer() {
running = false;
runner.interrupt();
}
}
Из сервлета я называю как:
private void startTaskManager() {
TaskManager.start(30);
}
Мои требования, что это будетвыполнить задачу в потоке в методе run (). Есть много задач, которые будут выбраны одна за другой из базы данных.
Приведенная выше реализация имеет некоторые проблемы. На приведенной выше реализации он имеет собственный интерфейс Task и реализован собственный Timer.
Я думаю, что есть другой лучший способ достичь этого планировщика. Пожалуйста, предложите мне.