Можно ли вызвать метод getAttribute () реализации Tomcat ServletContext без синхронизации?

Я хотел бы прочитать некоторые параметры во время инициализации сервлета (в методе init ()) и сохранить их среди атрибутов контекста сервлета (используя getServletContext (). SetAttribute ()). Я хотел бы прочитать эти параметры позже - во время некоторой обработки запроса (с помощью getServletContext (). GetAttribute ()). Таким образом, несколько потоков могут делать это одновременно. У меня вопрос: безопасна ли такая попытка? Могу ли я быть уверен, что многопоточные вызовы getAttribute () не испортят какое-либо внутреннее состояние контекста сервлета?

Учтите, что я не буду вызывать setAttribute () где-либо, кроме инициализации. Таким образом, только вызовы getAttribute () будут выполняться из нескольких потоков. Но в зависимости от внутренней реализации это тоже может быть опасно. Таким образом, будет приветствоваться любая информация о реализации Tomcat.


person oo_olo_oo    schedule 30.03.2010    source источник


Ответы (1)


Основная реализация ServletContext в Tomcat - это ApplicationContext класс. Если вы посмотрите на связанный ресурс, вы увидите, что атрибуты хранятся в экземпляре java.util.concurrent.ConcurrentHashMap. Итак, для ApplicationContext по крайней мере методы getAttribute() и setAttribute() являются потокобезопасными.

person Stephen C    schedule 30.03.2010