`
wuhongyu
  • 浏览: 407338 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

Struts 1 和 Struts 2 的线程安全

阅读更多

    昨天人问我Struts 2是怎么保证全局变量的线程安全的,跟Struts 1有什么区别,我一时懵了一下,没给解释清,发现自己也不是特别清楚,就google了一下,打算今天做个笔记,结果今没等google呢,就听说google走了,可惜了了啊!

还是说说 Struts 线程安全的事吧。

 

    总的来说,Struts1 的 Action 是单例模式,因此开发者必须保证它是线程安全的或是同步的,因为Struts 1中每个Action仅有一个实例来处理所有的请求。

 

    但是在用Struts 1开发时并没有考虑到线程安全问题,这是因为我们在Action中使用的基本都是局部变量,而“局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享的资源。局部变量包括方法的参数变量”(忘了引自哪了)。在Struts 1中,所有的变量都是定义在Action中我们要执行的方法里的(Action中的execute方法或DispatchAction中指定要执行的方法),我们用于封装客户端请求参数的ActionForm,也是作为一个参数传入,也属于局部变量,因此,不存在线程安全问题。

 

    Struts 2 的 Action 对象为每一个请求产生一个实例,因此,虽然在Action中定义了很多全局变量,也不存在线程安全问题。


    Struts 2框架在处理每一个用户请求的时候,都建立一个单独的线程进行处理,值栈ValueStack也是伴随着局部线程而存在的。在该线程存在过程中,可以随意访问值栈,这就保证了值栈的安全性。

 

    在Struts 2中,ActionContext是一个局部线程,这就意味着每个线程中的ActionContext内容都是唯一的。所以开发者不用担心Action的线程安全。

 

 

2
0
分享到:
评论
3 楼 di1984HIT 2015-02-06  
写的不错。
2 楼 guo2168 2010-12-21  
  明白的更清晰了
1 楼 _s45 2010-04-23  
讲的很清楚!非常感谢!

相关推荐

    struts1,struts2,webwork,线程安全问题

    综上所述,Struts1、Struts2和WebWork这三个框架都面临着线程安全问题,但在Struts2中这个问题得到了较好的解决。Struts2通过使用“prototype”作用域管理`Action`实例,有效地避免了线程安全问题。而对于Struts1和...

    struts1和struts2的区别

    - **Struts2**: Struts2中的Action更像是工厂模式下的产品,每个Action实例都是线程安全的。Struts2提供了ActionSupport基类来简化Action的实现。Action本身可以是任何实现了特定接口的Java对象,甚至是普通的POJO。...

    Struts1和Struts2的区别和对比

    线程模型方面,Struts1的Action是单例模式,意味着所有请求共享同一个Action实例,因此开发者需要确保Action和其资源是线程安全的。相比之下,Struts2为每个请求创建新的Action实例,消除了线程安全问题,也简化了...

    struts1和struts2区别

    Struts1和Struts2是两个非常著名的Java Web框架,它们在处理MVC(Model-View-Controller)架构方面有着显著的区别。以下是关于这两个框架在关键特性上的对比: 1. **Action类**: - **Struts1**:要求Action类继承...

    struts1和struts2的区别(详细)

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

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

    Servlet和Struts Action是两种常见的Java Web开发组件,它们在多线程环境下运行时可能存在线程安全问题。线程安全是指在多线程环境中,一个类或者方法能够正确处理多个线程的并发访问,保证数据的一致性和完整性。 ...

    Struts2与Struts1区别

    Struts2 和 Struts1 是两个著名的 Java Web 开发框架,它们都出自 Apache Software Foundation,但有着显著的区别。Struts1 是早期的 MVC 框架,而 Struts2 则是在 WebWork 框架的基础上发展起来的,它吸收了 Struts...

    Struts2和Struts1的区别,详细点,主要说说Struts2

    综上所述,**Struts2**相较于**Struts1**在架构设计、实现方式以及各种功能细节上都有了显著的改进,特别是在线程安全性、可扩展性及灵活性方面表现得更加出色。这使得**Struts2**成为了许多企业级应用的首选框架之...

    转:struts1与struts2的区别

    - **Struts1**: Struts1中的Action采用单例模式,因此必须确保线程安全性。这意味着开发者需要特别注意Action类中的资源管理,确保其线程安全或进行适当的同步操作。 - **Struts2**: 在Struts2中,为每个HTTP请求...

    struts2 与 struts1的区别

    ### Struts2 与 Struts1 的核心区别 #### 一、架构设计及Action实现...综上所述,Struts2相比Struts1在架构设计、线程安全性、输入处理、表单验证等方面进行了大量的改进和优化,使得其更适合现代Web应用的开发需求。

    Struts1与Struts2本质区别

    - **Struts 2**:每个请求都会创建一个新的Action实例,消除了线程安全问题,同时也减少了开发者在处理并发请求时需要考虑的问题。 #### 3. Servlet依赖方面的对比 - **Struts 1**:Action的方法签名中包含了`...

    struts1&struts2

    - **Struts2** 为每个请求创建新的Action实例,解决了线程安全问题,同时也更易于管理和测试。 5. **Servlet依赖** - **Struts1.x** 的Action类直接依赖于Servlet API,这使得测试变得更加困难。 - **Struts2** ...

    struts1.0和struts2

    总的来说,Struts2相对于Struts1在设计和实现上更加先进,提供了更高的灵活性、可扩展性和可测试性,同时也降低了开发的复杂性。Struts2的这些改进使得开发者能够更高效地构建和维护Java EE Web应用程序。

    程序员必看的书籍Struts1和Struts2的区别

    - **请求处理**:在Struts2中,每个请求都会创建一个新的Action实例,这解决了Struts1中的并发问题,同时也增加了线程安全性。 - **验证机制**:Struts2提供了更加灵活的验证框架,支持多种验证机制,如内建验证器、...

    Struts1和Struts2 的区别

    - Struts1的Action是单例模式,需要处理线程安全问题,而Struts2为每个请求创建新的Action实例,避免了线程安全问题。 2. **Servlet依赖**: - Struts1的Action直接依赖于Servlet API,执行方法接受...

    struts1与struts2本质区别

    - **Struts1**:采用单例模式处理所有请求,因此Action必须确保线程安全。这种模式虽然简化了内存管理,但增加了复杂度和潜在的错误风险,特别是在处理多线程环境时。 - **Struts2**:每个请求都会创建一个新的...

    Struts线程安全

    ### Struts线程安全概述 在探讨Struts框架下的线程安全问题之前,我们需要了解一些基础知识。Struts是一个用于构建企业级Java Web应用程序的开源框架,它基于MVC(Model-View-Controller)设计模式。在典型的Web...

Global site tag (gtag.js) - Google Analytics