Есть сервис, который надо запускать периодически. Как лучше реализовать периодическое выполнение задания на джаве? Какие "за" и "против" использования Thread.sleep, TimerTask и тредпула?
package main;
import services.Service;
public class Main {
public static void main(String[] args) {
Service s = new Service();
while (true) {
s.service();
try {
Thread.sleep(5000);
}
catch (InterruptedException e) {
}
}
}
}
При разработке прикладного программного обеспечения надо всегда стремиться использовать абстракции как можно более высокого уровня, в особенности если это enterprise-приложение. Не знаю, что конкретно вы имеете ввиду под "сервисом JavaEE", но EJB-контейнер предоставляет инфраструктуру как для управления потоками, так и для периодических задач. Используйте @Schedule и @Timeout вместо Thread.sleep(), TimerTask и тому подобного.
@Singleton
public class TimerBean {
@Schedule(second = "*/5", minute = "*", hour = "*", persistent = false)
public void periodicTask() throws InterruptedException {
...
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости