在webapp中创建并发HashMap

时间:2010-09-06 09:12:59

标签: java multithreading tomcat servlets

在Tomcat中创建线程安全HashMap的最佳方法是什么?我将在加载应用程序时在InitServlet上创建ConcurrentHashMap。

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

来自不同线程的请求将读取和写入我的ConcurrentHashMap数据。 我不擅长多线程,所以不确定它是否接近正确?

放置这个HashMap的最佳位置应该放在哪里?

谢谢

2 个答案:

答案 0 :(得分:4)

请勿将其设为静态 - 通过ServletContext将其放入ctx.setAttribute("mapAttrKey", map)。否则没关系。但是,做这样的事情并不常见,所以请分享你的用例 - 可能有更合适的解决方案。

答案 1 :(得分:3)

如果“initServlet”除了w​​ebapplication初始化之外什么也不做,那么你宁愿选择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(应用程序范围)中。

相关问题: