Java выполнение повторяющихся заданий

162
19 октября 2018, 20:20

Есть сервис, который надо запускать периодически. Как лучше реализовать периодическое выполнение задания на джаве? Какие "за" и "против" использования 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) {
            }
        }
    }
}
Answer 1

При разработке прикладного программного обеспечения надо всегда стремиться использовать абстракции как можно более высокого уровня, в особенности если это enterprise-приложение. Не знаю, что конкретно вы имеете ввиду под "сервисом JavaEE", но EJB-контейнер предоставляет инфраструктуру как для управления потоками, так и для периодических задач. Используйте @Schedule и @Timeout вместо Thread.sleep(), TimerTask и тому подобного.

@Singleton
public class TimerBean {
    @Schedule(second = "*/5", minute = "*", hour = "*", persistent = false)
    public void periodicTask() throws InterruptedException {
        ...
    }
}
READ ALSO
Как создать объект типа T

Как создать объект типа T

У меня есть метод с параметром

183
Java. События кнопки

Java. События кнопки

Учу события кнопки и не могу решить задачу, тк не понимаю с областями видимости и со смыслом

197
Следить за Log-ами приложения

Следить за Log-ами приложения

UPDATED Как правильно записывать логи в файл в приложении, что проверяют тестировщики?

218
Как установить пометку checked в form:radiobuttons?

Как установить пометку checked в form:radiobuttons?

при генерации формы на jsp странице использую тег form:radiobuttons, в который передаю список с параметрами

222