`

Struts1 之中类成员变量的线程问题

阅读更多

Struts1 由于是非线程安全的,action中的成员变量 可能是同时使用的。

现在记录下其编程模式,供之后参考:

公司代码中,提供的 Service 类全部提供了一个 getInstance() 方法来得到该服务的一个单实例类。

 


public class ProductManagerService {


 private static ProductManagerService instance = new ProductManagerService();

 public static ProductManagerService getInstance() {
  return instance;
 }

}

 

Action 中使用这个方法来得到单实例。


public class InsuranceAction extends CommonAction {
 

private ProductManagerService productManagerService = ProductManagerService
   .getInstance();
................

 

}

 

 

分享到:
评论

相关推荐

    servlet与Struts action线程安全问题分析

    在Struts1中,Action实例通常会被复用,这意味着如果Action类中含有实例变量,那么这些变量可能会被不同请求之间的线程共享,增加线程安全问题的风险。相比之下,Struts2采用每次请求创建新Action实例的策略,从而在...

    servlet与Struts action线程安全问题分析(pdf)

    在Struts 1.x版本中,Action对象也是被复用的,这就意味着如果Action类中包含实例变量,则可能会出现类似Servlet中的线程安全问题。 解决Struts Action的线程安全问题的方法与解决Servlet中的方法类似。通常建议...

    Struts线程安全

    因此,如果Action类中有实例变量,它们可能会被多个线程共享并同时访问,从而引发线程安全问题。 - **使用局部变量**:局部变量是线程安全的,因为它们是在方法调用时在栈上分配的,每个线程都有其独立的栈空间。这...

    struts1和struts2的区别(详细)

    - **Struts2**: 相比之下,Struts2中的Action是多例的,每次请求都会创建一个新的Action实例,这样就避免了线程安全的问题。Struts2通过提供一个默认的基类`ActionSupport`,使得开发者可以很容易地继承这个类来创建...

    struts1与struct2的不同

    - **Struts1**:Action类采用单例模式,意味着一个Action实例处理所有请求,这要求Action及其成员变量必须是线程安全的,增加了开发的复杂性。 - **Struts2**:Action对象为每个请求创建一个新实例,消除了线程...

    java struts2学习笔记之线程安全

    由于Servlet实例是共享的,这可能导致线程安全问题,尤其是当Servlet中包含可变状态(如全局变量)时。例如,上面的`ThreadSafeServlet`示例展示了这个问题:两个并发请求修改了同一个`name`变量,导致最终的输出与...

    struts2学习心得

    2. Struts2不需要注意线程同步的问题,而Struts1则面临这个问题,因为Struts1对action创建的时候只创建一次,当多个用户同时访问这个action时,则必须出现这个同步的问题。而对Struts2来说,需要action时都要重新new...

    Struts之进阶篇.pdf

    要在ActionForm中使用Map,需要在ActionForm类中定义一个Map类型的成员变量,并且实现相应的getter和setter方法。例如: ```java public class MyActionForm extends ActionForm { private Map, String> ...

    struts2中的ActionContext与ognl

    ActionContext是Struts2框架中一个关键的组件,它提供了当前请求上下文的信息,而OGNL(Object-Graph Navigation Language)则是Struts2中的表达式语言,用于在模型和视图之间进行数据传递。下面将详细探讨这两个...

    《Struts2_自学教程》

    - **Struts1**: 在Struts1中,所有Action类都必须继承自`Action`抽象类。这意味着开发者在创建Action时,必须遵循该抽象类提供的固定结构和方法定义。这种设计方式虽然确保了一定程度的一致性和易于维护,但也限制了...

    Java面试题线程部分.docx

    Java线程是程序执行的基本单元,它在Java中扮演着至关重要的角色,特别是在多任务并行处理和提高应用程序性能方面。...然而,开发者仍需关注Controller中的线程安全问题,尤其是当Controller中存在成员变量时。

    跟我一步一步学struts2

    此外,Struts2的Action对象为每个请求实例化,解决了Struts1中的线程安全问题,不再需要开发者额外处理线程安全。 在依赖性方面,Struts1的Action直接依赖于Servlet API,而Struts2的Action则不依赖容器,可以独立...

    struts源码学习.pdf

    - **概述**:`RequestProcessor`类在Struts架构中扮演着核心角色之一,主要作为`ActionServlet`的助手类。`ActionServlet`的主要功能通过`RequestProcessor`类实现,尤其是在处理HTTP请求时。 - **职责**:处理...

    Struts2 学习 2

    ThreadLocal是Java中一个线程局部变量,每个线程都有自己的副本,避免了多线程环境下的数据共享问题。在Struts2中,ThreadLocal被用来存储和管理请求相关的数据,确保在并发环境下每个请求都能正确地访问其独有的...

    Struts2_0700_ActionAtrrParamInput

    - 在Action类中,我们定义了各种属性(成员变量),这些属性可以用来接收从视图层传递过来的请求参数。例如,如果我们有一个名为`username`的参数,可以在Action类中声明对应的`private String username;`,然后...

    servlet和struts2笔记

    - 由于一个 Servlet 实例可能会同时处理多个请求,因此在 Servlet 中声明成员变量存储用户数据可能导致线程安全问题。 - **解决方案**: - 实现 `SingleThreadModel` 接口,但这种方式已被废弃,因为效率低下。 ...

    Struts2中xwork源码

    - **ActionContext**: 这个类是线程上下文,它保存了执行Action时所需的各种环境变量,如参数、值栈等。 - **ValueStack**: 值栈是一个对象栈,用于存储Action的属性和结果,它是Struts2中数据传递的关键机制。 -...

Global site tag (gtag.js) - Google Analytics