可以在没有同步的情况下调用Tomcat ServletContext实现的getAttribute()方法吗?

时间:2010-03-30 10:48:38

标签: java multithreading tomcat parameters servlets

我想在servlet初始化期间(在init()方法中)读取一些参数,并将它们存储在servlet上下文属性中(使用getServletContext()。setAttribute())。我想稍后阅读这些参数 - 在一些请求处理期间(使用getServletContext()。getAttribute())。因此,多个线程可以同时执行此操作。我的问题是这样的尝试是否安全?我可以确定对getAttribute()的多线程调用不会搞乱servlet上下文的任何内部状态吗?

请考虑到我不会在初始化之外的任何地方调用setAttribute()。因此,只能从多个线程调用getAttribute()。但是根据内部实施情况,这也可能是危险的。因此,任何有关Tomcat实现的信息都将受到赞赏。

1 个答案:

答案 0 :(得分:6)

Tomcat中ServletContext的主要实现是ApplicationContext类。如果查看链接资源,您将看到属性存储在java.util.concurrent.ConcurrentHashMap实例中。因此,对于ApplicationContext,至少getAttribute()setAttribute()方法是线程安全的。