Действительно ли безопасно использовать java.util. Таймер в сервлете?

По многим причинам это не хорошая практика для использования потоков в сервлете.

java.util.Timer походит на обертку вокруг потока. Так, разве также не безопасно использовать его? Если так, что самый безопасный путь состоит в том, чтобы запланировать задачу в сервлете?

6
задан Octahedron 22 July 2013 в 15:21
поделиться

2 ответа

Да, можно использовать таймеры.

Одно важное запомнить, чтобы при остановке сервлета отменить этот таймер . Если вы забудете отменить Таймер, ваше веб-приложение пострадает от утечки памяти (утечка в классе, так как Тема Таймера привязана к WebappClassLoader через его ContextClassLoader) и не может быть развернуто несколько раз.

.
9
ответ дан 9 December 2019 в 22:35
поделиться

Да. Это совершенно безопасно. Контейнер сервлета будет заботиться о потоках для HTTP-запросов, но вы можете порождать дополнительные потоки самостоятельно, независимо от того, ограничен ли их срок жизни запросом, или дольше.

например, обычный шаблон - это порождение длинноходовой технологической нити. Запросы сервлетов ставят рабочие элементы в очередь (для внеполосной обработки), а длинный поток обработки будет обрабатывать эти рабочие элементы.

Вот статья из OReilly, подробно описывающая использование таймера в сервлетах и EJBs.

.
2
ответ дан 9 December 2019 в 22:35
поделиться
Другие вопросы по тегам:

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