【问题标题】:HttpServletRequest and static method thread-safety in Struts 2Struts 2 中的 HttpServletRequest 和静态方法线程安全
【发布时间】:2012-12-03 21:37:06
【问题描述】:

假设我在这样的类中有一个静态方法:

public static String getSomething(HttpServletRequest request)

方法中调用request.getHeader("headerName")和request.getParameter("parameterName")。

另外,在 Struts 2 Action 中,我在 execute() 中调用了这个函数:

private String theString;

public String execute() throws Exception {
    theString = TheClass.getSomething(ServletActionContext.getRequest());
    ....
    ....
}

假设我没有修改我的静态 getSomething(request) 函数中的请求反对,这个线程安全吗?我猜是的,因为据我了解,动作中的 HttpServletRequest 对象是线程本地的,但我不是 100% 确定。

【问题讨论】:

  • 每个线程都有一个单独的线程,因此如果从多个线程调用它并不重要,因为它们不共享状态。
  • @Jimadilo:但我想我们只有一个动作类对象(Singleton,这是我基于 Servlet 原理的假设)。所以,在这种情况下,所有线程(来自浏览器的请求)都会操作相同的对象状态(theString),不是吗?
  • @Nambari No. Struts 2 根据请求实例化一个动作。 Servlet 不是 Struts 2。
  • @DaveNewton:感谢您的澄清,正如我所说,还没有在 Struts2 上工作过。我将删除我的第一条评论。

标签: java struts2 thread-safety static-methods


【解决方案1】:

是的,它是完全线程安全的,因为所有变量都只从堆栈中引用。

【讨论】:

  • 所以 Struts 2 不可能在另一个线程中对 HttpServletRequest 对象进行任何更改,因为它是线程本地的?
  • @jtyler 请求是每个请求的,否则不是正在处理的请求。
  • 好极了,好的,我不确定 Struts 2 是否会对我不知道的请求做任何奇怪的事情 - 谢谢。
【解决方案2】:

是的,它是线程安全的,因为您将它作为参数传递。就像在代码中使用静态数学类一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多