Нужна ли синхронизация между сервлетом Filter.init () и Filter.doFilter ()? - PullRequest
0 голосов
/ 09 апреля 2020

Это вопрос жизненного цикла фильтра сервлетов.

Я пытаюсь понять, нужна ли мне синхронизация (или использование изменяемой переменной) между сервлетом Filter.init () и Filter.doFilter (). Метод init () выполнит умеренно дорогой расчет инициализации (не определяемый запросом c) и сохранит результат в объекте Filter для использования только для чтения методом doFilter () каждый раз, когда он вызывается.

Я не вижу, чтобы сервлет spe c говорил, что существует явная системная синхронизация между тем потоком, на котором выполняется Filter.init (), и всеми потоками обработки запросов сервлета, так что это говорит о том, что я надо их как-то синхронизировать. Сервлет spe c использует слово «до» в описании жизненных циклов фильтра. Является ли это тщательно сформулированной ссылкой на отношение «происходит до», которое используется во многих описаниях Java многопоточности и синхронизации? Или это на самом деле не так «жестко»?

Для соответствия сервлету spe c, нужно ли явно синхронизировать, когда данные совместно используются Filter.init () и Filter.doFilter ()? В частности, почему или почему нет - то есть какая часть сервлета spe c явно определяет ответ на этот вопрос? Или есть какой-то другой способ, которым я должен смотреть на эту проблему / вопрос?

(Случай использования передо мной - это статически зарегистрированный фильтр в статически зарегистрированном сервлете, использующий синхронную обработку сервлета, но если Ответ отличается в других конфигурациях, может быть полезно знать это тоже.)

...