`

由Action是否是线程安全的引发的思考

阅读更多
不知道从哪个地方入的口,一直看到Action是否是安全的,在网上找了一大通答案。乱的很,有的说Action是线程安全的,有的说是线程不安全的。最后发现,原来说线程安全的是基于struts2的,而说线程不安全的是基于struts1的。
总结:
struts1中,每一个Action在web容器中只会有一个实例,因此它是不安全的(我们必须明白什么样的变量是线程安全的,方法内的局部变量和方法的参数变量都是线程安全的,所以即使系统只启用一个Action对象为所有线程服务,因为Form对象对每个请求来说都是单独创建的,而且是做为参数传到Action里,所以Form对象一定是线程安全的. )只要在Action中不使用实例变量就可以避免线程不安全的问题了。
struts2中,Action是多实例的,每一个请求会创建一个action。
Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题 。
Servlet也是线程不安全的。有关于Servlet的线程安全问题请看这篇文章:http://www.yesky.com/334/1951334.shtml。
3
1
分享到:
评论

相关推荐

    Action是否线程安全

    线程安全是多线程编程中的一个关键概念,它涉及到一个对象在被多个线程并发访问时,是否能保持其正确性,即不会出现数据不一致或异常。现在我们来详细讨论`Action`以及其线程安全性。 首先,让我们区分两种可能的`...

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

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

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

    在Struts1中,每个`Action`类实例是被多个请求重用的,这使得它在多线程环境下存在潜在的线程安全问题。当多个线程同时访问一个`Action`实例时,可能会因为共享状态而导致数据不一致或其他并发问题。 - **Struts1中...

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

    ### servlet与Struts action线程安全问题分析 #### 一、引言 随着互联网应用的不断普及和发展,基于Servlet和JSP技术的应用程序在企业级应用中占据着重要的位置。Servlet作为一种常用的技术栈,因其多线程运行特性...

    C#线程安全和跨线程问题

    在“C#线程安全和跨线程问题”这个主题中,我们将深入探讨如何处理这些复杂性。 线程安全是指一个类或方法在多线程环境下能够正确地工作,不会因为并发访问而导致数据不一致或意外的行为。在C#中,线程安全通常涉及...

    Struts线程安全

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

    Struts中action线程安全问题解析

    这意味着如果你的Action类(通常继承自Struts的`ActionSupport`)被当作Servlet使用,那么每个请求可能会由不同的实例来处理,这有助于避免线程安全问题,因为每个实例都有自己的状态。 然而,在Struts1中,Action...

    C#线程间操作无效Study

    在Windows Forms或WPF应用程序中,UI元素是线程安全的,只能由创建它们的线程进行修改。因此,当非UI线程尝试修改UI元素,如文本框、按钮等,就会抛出此异常。 解决“线程间操作无效”的方法主要有两种: 1. 使用`...

    线程间窗体控件安全调用

    由于UI控件是由主线程创建的,它们默认只能由主线程进行修改,这是为了保证UI的一致性和线程安全。 在.NET Framework中,控件类(如Button、Label等)具有一个属性`InvokeRequired`,用于检查当前线程是否为控件...

    强大安全多线程的Flux模式

    在“强大,安全,多线程的Flux模式”中,我们将探讨如何在JavaScript开发环境中实现高效且安全的状态管理。 首先,Flux的核心概念是单向数据流。这意味着数据从服务器获取,经过Action Creator,然后通过Dispatcher...

    C#多线程编程实例 线程与窗体交互源码

    但是,直接从非UI线程修改UI元素(如按钮、文本框等)可能会导致线程不安全的操作,引发异常。 标题中的"C#多线程编程实例 线程与窗体交互源码"意味着这个示例将展示如何在线程安全的环境下操作UI组件。在C#中,...

    C# 跨线程访问UI线程控件

    在C#中,由于使用线程和调用UI的线程属于两个不同的线程,如果在线程中直接设置UI元素的属性,此时就会出现跨线程错误。    下面介绍两种解决方案  第一种:使用控件自带的Invoke或者BeginInvoke方法。 Task....

    WinForm后台线程与UI线程通讯

    由于.NET Framework的安全机制,直接在非UI线程修改UI组件可能会导致线程不安全的问题,因此需要正确地进行线程间通信。本文将详细探讨如何在WinForm应用中实现在后台线程与UI线程之间的通信,并确保UI更新的安全。 ...

    Cpp_Concurrency_In_Action(本书是基于C++11新标准的并发和多线程编程深度指南。),非扫描版

    还有异常安全性和资源管理,这两点在并发编程中尤为重要,因为线程的异常行为可能会导致资源泄漏,而智能指针和RAII(Resource Acquisition Is Initialization)原则可以帮助我们解决这些问题。 最后,书中也会讨论...

    C# 线程A访问非线程A创建的控件 、 线程内创建窗体置顶显示ShowDialog

    在C#编程中,线程安全性和多线程交互是一个重要的主题。特别是在Windows Forms或WPF应用程序中,UI(用户界面)元素通常由主线程创建并管理,而其他后台线程可能需要与这些UI元素进行交互。这涉及到跨线程访问控件的...

    C#多线程编程 四个显示线程计算结果的函数

    由于Windows Forms或WPF等UI框架的控件是线程安全的,即它们只能由创建它们的线程(主线程)进行修改。因此,从属线程不能直接修改UI控件。这时就需要使用到“封送处理”(Marshalling),这是跨线程通信的一种机制...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)

    本资源包含六个C#.NET多线程实例,涵盖了多线程的基本使用以及高级特性,如线程互斥,确保了线程安全和数据一致性。 1. **多线程基础**: - **创建线程**:在C#中,可以使用`Thread`类创建新线程。通过构造函数...

Global site tag (gtag.js) - Google Analytics