【问题标题】:Can getAttribute() method of Tomcat ServletContext implementation be called without synchronization?Tomcat ServletContext实现的getAttribute()方法可以不同步调用吗?
【发布时间】:2010-03-30 10:48:37
【问题描述】:

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

请注意,除了初始化之外,我不会在任何地方调用 setAttribute()。因此,只有对 getAttribute() 的调用才会从多个线程中完成。但是根据内部实现,这也可能很危险。因此,任何有关 Tomcat 实现的信息都将不胜感激。

【问题讨论】:

    标签: java multithreading tomcat parameters servlets


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多