Каковы некоторые потокобезопасные методы для хранения данных о запросе отдельного пользователя в сервлете?

Если сервлет не является потокобезопасным, значит ли это, что все объекты, созданные и используемые в течение жизненного цикла сервлета, не являются потокобезопасными? Возможно, я не совсем понимаю это, но в веб-приложениях вы почти всегда хотите учитывать данные, хранящиеся в течение жизненного цикла сервлета, которые относятся к запросу отдельного пользователя. Каковы некоторые из лучших практик управления этими данными? Должен ли я создать экземпляр процессора (как фронт-контроллер) для моего сервлета и заключить его в синхронизированный блок? Похоже, это серьезная проблема с производительностью.


person Community    schedule 27.02.2010    source источник


Ответы (2)


Просто не назначайте данные запроса или сеанса в качестве переменной экземпляра сервлета. Это все. Объявите и назначьте их внутри блока метода, и он будет потокобезопасным (читайте: он больше не будет использоваться всеми запросами / потоками). Я подробно отвечал на это раньше здесь: Как в Java убедиться, что мое веб-приложение является потокобезопасным?.

person BalusC    schedule 27.02.2010

Переменные экземпляра не являются потокобезопасными. Локальные переменные (объявленные в методах) будут потокобезопасными; каждый поток имеет свой собственный набор локальных переменных.

См. Эту статью JavaWorld о написании поточно-ориентированных сервлетов для получения дополнительных советов, если вы ДОЛЖНЫ полагаться на переменную экземпляра.

person marklai    schedule 27.02.2010