`
2007yn
  • 浏览: 43312 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

关于struts中Action是否线程安全问题

阅读更多

action到底是thread safe还是unsafe呢 我们来看看servlet是否是thread safe ,action都是继承至servlet的

看看其他资料的解释:

JSP默认是以多线程方式执行的,这是JSP与ASP,PHP,PERL等脚本语言不一样的地方,也是它的优势之一,但如果不注意多线程中的同步问题,会使所写的JSP程序有难以发现的错误。

JSP的中存在的多线程问题:

当客户端第一次请求某一个JSP文件时,服务端把该JSP编译成一个CLASS文件,并创建一个该类的实例,然后创建一个线程处理CLIENT端的请求。如果有多个客户端同时请求该JSP文件,则服务端会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可大大降低对系统的资源需求,提高系统的并发量及响应时间.对JSP中可能用的的变量说明如下:

实例变量
实例变量是在堆中分配的,并被属于该实例的所有线程共享,所以不是线程安全的.
JSP系统提供的8个类变量
JSP中用到的OUT,REQUEST,RESPONSE,SESSION,CONFIG,PAGE,PAGECONXT是线程安全的,APPLICATION在整个系统内被使用,所以不是线程安全的.
局部变量
局部变量在堆栈中分配,因为每个线程都有它自己的堆栈空间,所以是线程安全的.
静态类
静态类不用被实例化,就可直接使用,也不是线程安全的.
外部资源:
在程序中可能会有多个线程或进程同时操作同一个资源(如:多个线程或进程同时对一个文件进行写操作).此时也要注意同步问题.
 

使它以单线程方式执行,这时,仍然只有一个实例,所有客户端的请求以串行方 式执行。这样会降低系统的性能

最后的解决方案是:不要在action里用实例变量
 

struts的action是非线程安全的。
不要在action中定义实例变量。


在spring的配置文件中,可以配置action为线程安全,即每次调用都生成一个新的实例,而不是只用一个实例。
bean中设置singleton="true"

 

<bean id="/itemDayAction" class="com.joyinter.skype.statistic.action.ItemDayAction" singleton="true">
    <property name="itemDayBO">
        <ref bean="itemDayBO"/>
    property>
        <property name="avatarItemBO">
        <ref bean="avatarItemBO"/>
    property>
bean> 

 

分享到:
评论

相关推荐

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

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

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

    servlet与Struts action线程安全问题分析 &lt;br&gt;===================================================== Servlet的线程安全问题只有在大量的并发访问时才会显现出来,并且很难发现,因此在编写Servlet程序时要...

    Struts中action线程安全问题解析

    主要介绍了Struts中action线程安全问题解析,涉及实例代码,还是挺不错的,具有一定参考价值,需要的朋友可以了解下。

    Struts1与Struts2本质区别

    Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。 3 Servlet依赖方面的对比:Struts 1 Action依赖于Servlet API,因为Struts 1 Action的execute方法中有HttpServletRequest和...

    Struts 2.0

    清晰的介绍了Struts 2.0框架的工作流程,Action线程安全,程序入口,配置文件。

    struts1和struts2区别

    不同点 Action 类 线程模式 Servlet 依赖 可测性 捕获输入 表达式语言 绑定值到页面(view) 类型转换 校验 Action执行的控制 文档更详细……

    Struts2与struts1不同

    Struts2和Struts1的不同  Action 类: 线程模式:

    JAVA-SSH面试题

    struts2.0 Action为每一个请求产生一个实例,因此没有线程安全问题。 c、Servlet依赖 struts1.2 Action依赖于Servlet API,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execut方法。 ...

    SSH架构优缺点分析.rar

    标准struts的action是非线程安全(很多简历上写着"精通Struts"的高手们都忽视的问题) 不熟悉: struts标签库没怎么用过(常用jstl) 国际化只学过,没用过.停留在demo级别 validation.xml(配置文件写多了,有时候也...

    struts2.doc

    struts2.doc struts 1 和struts 2比较 Action 类 线程模式 Servlet 依赖 可测性 捕获输入 表达式语言 绑定值到页面(view) 类型转换 校验 Action执行的控制 等 自己总结的一些东西

    Struts2与Struts1的对比

    Struts2与Struts1的对比 对Action 类、线程模式、捕获输入、表达式语言、 绑定值到页面(view)、类型转换、Action执行的控制 等等读做了解析.

    Java Struts 实现拦截器

    该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp:它主要是清理当前线程的ActionContext、Dispatcher,FilterDispatcher主要是通过ActionMapper来决定需要调用那个Action,...

    spring+struts+Hibernate面试题

    几十道面试题 如:strust的。 Action是不是线程安全的?如果不是 有什么方式可以保证Action的线程安全?如果是,说明原因 。。。。。

    java ssh 面试题

    java 框架面试题 Action是不是线程安全的?如果不是 有什么方式可以保证Action的线程安全?如果是,说明原因 struts1不是,struts2是;

    struts1和struts2的比较

    基于Action类,线程模型,servlet依赖,易测性,接受输入,表达式语言等的比较

    Struts1与Struts2的12点区别

    1) 在Action实现类方面的对比 2) 线程模式方面的对比 3) Servlet依赖方面的对比...

    Struts2请求处理流程及源码分析

    a)客户端初始化一个指向Servlet容器...d)请求经过核心过滤器FilterDispatcher,执行doFilter方法,在该方法中,询问ActionMapper来决定这个请求是否需要调用某个Action;e)如果ActionMapper决定需要调用某个Action,则

Global site tag (gtag.js) - Google Analytics