Для такого рода вещей просто установите Кварц . EJB имеет некоторую поддержку для такого рода вещей, но на самом деле вы просто хотите Quartz для запланированных задач.
При этом, если вы настаиваете на том, чтобы сделать это самостоятельно (и я бы рекомендовал этого не делать), используйте ScheduledThreadPoolExecutor
.
ScheduledExecutorService executor = new ScheduledThreadPoolExecutor(4);
ScheduledFuture<?> future =
executor.scheduleAtFixedRate(runnable, 1, 24, TimeUnit.HOUR);
, который будет запускать Runnable
каждый день с начальной задержкой в один час.
Или:
Timer timer = new Timer();
final Callable c = callable;
TimerTask task = new TimerTask() {
public void run() {
c.call();
}
}
t.scheduleAtFixedRate(task, firstExecuteDate, 86400000); // every day
Timer
имеет несколько более простой интерфейс и был введен в 1.3 (другой - 1.5), но один поток выполняет все задачи, тогда как первый позволяет вам это настроить. Плюс ScheduledExecutorService
имеет более приятные (и другие) методы выключения.