Как остановить потоки при неразвертывании JAVA EE-приложения? [дубликат]

8
задан Community 23 May 2017 в 12:14
поделиться

1 ответ

Скорее используйте ScheduledExecutorService # scheduleAtFixedRate () вместо старомодного Thread # sleep () . Вы можете использовать ServletContextListener , чтобы запускать его при запуске веб-приложения и останавливать его при завершении работы веб-приложения.

@WebListener
public class Config implements ServletContextListener {

    private ScheduledExecutorService scheduler;

    @Override
    public void contextInitialized(ServletContextEvent event) {
        scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new Task(), 0, 1, TimeUnit.MINUTES); // Schedule to run every minute.
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        scheduler.shutdown(); // Important! This stops the thread.
    }

}

Где Задача может выглядеть так:

public class Task implements Runnable {

    @Override
    public void run() {
        log(something);
    }

}

Если ваша среда не поддерживает Servlet 3.0 @WebListener , то зарегистрируйте его в web.xml , чтобы запустить его:

<listener>
    <listener-class>com.example.Config</listener-class>
</listener>
13
ответ дан 5 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: