【问题标题】:Are Struts 2 actions thread safe?Struts 2 动作线程安全吗?
【发布时间】:2014-05-02 05:27:54
【问题描述】:

它说自从 Struts 2 动作 bean 被初始化每个请求它们是线程安全的。但是如果多个线程在同一个 HTTP 请求中使用这个 bean 怎么办?所以除非我们以线程安全的方式编写 bean,否则它不是真正的线程安全的吗?

下面是来自 struts 2 的文档,当比较 Struts 1 和 Struts 2 时,

Struts 2 Action objects are instantiated for each request, so there are no thread-safety issues

struts 2 documentation

我的想法甚至是为每个请求实例化 Struts 2 Action 对象仍然不是线程安全的,对吧?

【问题讨论】:

  • 你说的是哪个bean?
  • 不使用怎么办?对我来说似乎太宽泛了。澄清为什么它们不是线程安全的问题。发布一个代码示例以向我们展示您是否有。
  • 我添加了更多信息 Roman。谢谢
  • 你在谈论对话吗?它们是线程安全的,但不是对话安全的。在浏览器窗口之间共享相同的会话是不安全的。在这种情况下,你会遇到脏读。
  • 如果文章是这样的“..there are thread-safety issues”,那你理解什么?没有线程安全问题意味着无需担心线程安全。就是这样。

标签: java http web-applications struts2 thread-safety


【解决方案1】:

在我看来,Web 应用程序是使用 servlet 技术设计的。 Struts2 至少支持 servlet 规范 2.4。 Web 服务器使用 HTTP 协议与客户端通信并管理线程。而且您知道容器的每个请求创建的线程不超过一个。除了BackgroundProcess 之外,该框架不会创建任何线程,并且看起来它是以线程安全的方式进行的。您不负责管理动作 bean,框架正在为您做这件事。因此,如果它声称它是线程安全的,您可以信任它,或者如果您有相反的证据,则可以妥协。根据此信息,您可以得出结论,您可以使用线程安全的托管 bean。

【讨论】:

    【解决方案2】:

    对于每个请求,都会创建 Action 类的新实例。所以 struts 2 action 类不存在线程安全问题。

    【讨论】:

      【解决方案3】:

      是的,它是线程安全的。

      Struts1 动作类是单例的并且不是线程安全的,这在开发人员方面要格外小心,以避免由于多线程而产生的任何副作用。 Struts2 动作类根据请求进行实例化,因此没有多线程并使其成为线程安全的。

      Blockquote

      【讨论】:

        猜你喜欢
        • 2021-10-31
        • 1970-01-01
        • 1970-01-01
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-15
        相关资源
        最近更新 更多