Создать одновременную HashMap в веб-приложении - PullRequest
1 голос
/ 06 сентября 2010

Каков наилучший способ сделать потокобезопасный HashMap в Tomcat? Я собираюсь создать ConcurrentHashMap на InitServlet один раз при загрузке моего приложения.

 (<load-on-startup>1</load-on-startup>)

Запросы из разных потоков будут считывать и записывать данные вмой ConcurrentHashMap.Я плохо разбираюсь в многопоточности, поэтому не уверен, что он подходит правильно?

И где лучше всего поместить этот HashMap, если я сделаю его статичным?

Спасибо

Ответы [ 2 ]

4 голосов
/ 07 сентября 2010

Не делайте это статичным - поместите его в ServletContext через ctx.setAttribute("mapAttrKey", map).В противном случае это нормально.Однако такие вещи не очень распространены, поэтому, пожалуйста, поделитесь своим примером использования - может быть, есть более правильное решение.

3 голосов
/ 07 сентября 2010

Если "initServlet" не делает ничего, кроме инициализации веб-приложения, тогда вы предпочитаете ServletContextListenrer. Вот пример начала:

public class Config implements ServletContextListener {

    public void contextInitialized(ServletContextEvent event) {
        // Do stuff during webapp's startup.
    }

    public void contextDestroyed(ServletContextEvent event) {
        // Do stuff during webapp's shutdown.
    }

}

Зарегистрируйте его в web.xml следующим образом:

<listener>
    <listener-class>com.example.Config</listener-class>
</listener>

Вот и все. Вы можете сохранить Map в качестве переменной экземпляра и / или сохранить его в ServletContext (область приложения).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...