不知道从哪个地方入的口,一直看到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。
分享到:
相关推荐
线程安全是多线程编程中的一个关键概念,它涉及到一个对象在被多个线程并发访问时,是否能保持其正确性,即不会出现数据不一致或异常。现在我们来详细讨论`Action`以及其线程安全性。 首先,让我们区分两种可能的`...
Servlet和Struts Action是两种常见的Java Web开发组件,它们在多线程环境下运行时可能存在线程安全问题。线程安全是指在多线程环境中,一个类或者方法能够正确处理多个线程的并发访问,保证数据的一致性和完整性。 ...
在Struts1中,每个`Action`类实例是被多个请求重用的,这使得它在多线程环境下存在潜在的线程安全问题。当多个线程同时访问一个`Action`实例时,可能会因为共享状态而导致数据不一致或其他并发问题。 - **Struts1中...
### servlet与Struts action线程安全问题分析 #### 一、引言 随着互联网应用的不断普及和发展,基于Servlet和JSP技术的应用程序在企业级应用中占据着重要的位置。Servlet作为一种常用的技术栈,因其多线程运行特性...
在“C#线程安全和跨线程问题”这个主题中,我们将深入探讨如何处理这些复杂性。 线程安全是指一个类或方法在多线程环境下能够正确地工作,不会因为并发访问而导致数据不一致或意外的行为。在C#中,线程安全通常涉及...
因此,如果Action类中有实例变量,它们可能会被多个线程共享并同时访问,从而引发线程安全问题。 - **使用局部变量**:局部变量是线程安全的,因为它们是在方法调用时在栈上分配的,每个线程都有其独立的栈空间。这...
这意味着如果你的Action类(通常继承自Struts的`ActionSupport`)被当作Servlet使用,那么每个请求可能会由不同的实例来处理,这有助于避免线程安全问题,因为每个实例都有自己的状态。 然而,在Struts1中,Action...
在Windows Forms或WPF应用程序中,UI元素是线程安全的,只能由创建它们的线程进行修改。因此,当非UI线程尝试修改UI元素,如文本框、按钮等,就会抛出此异常。 解决“线程间操作无效”的方法主要有两种: 1. 使用`...
由于UI控件是由主线程创建的,它们默认只能由主线程进行修改,这是为了保证UI的一致性和线程安全。 在.NET Framework中,控件类(如Button、Label等)具有一个属性`InvokeRequired`,用于检查当前线程是否为控件...
在“强大,安全,多线程的Flux模式”中,我们将探讨如何在JavaScript开发环境中实现高效且安全的状态管理。 首先,Flux的核心概念是单向数据流。这意味着数据从服务器获取,经过Action Creator,然后通过Dispatcher...
但是,直接从非UI线程修改UI元素(如按钮、文本框等)可能会导致线程不安全的操作,引发异常。 标题中的"C#多线程编程实例 线程与窗体交互源码"意味着这个示例将展示如何在线程安全的环境下操作UI组件。在C#中,...
在C#中,由于使用线程和调用UI的线程属于两个不同的线程,如果在线程中直接设置UI元素的属性,此时就会出现跨线程错误。 下面介绍两种解决方案 第一种:使用控件自带的Invoke或者BeginInvoke方法。 Task....
由于.NET Framework的安全机制,直接在非UI线程修改UI组件可能会导致线程不安全的问题,因此需要正确地进行线程间通信。本文将详细探讨如何在WinForm应用中实现在后台线程与UI线程之间的通信,并确保UI更新的安全。 ...
还有异常安全性和资源管理,这两点在并发编程中尤为重要,因为线程的异常行为可能会导致资源泄漏,而智能指针和RAII(Resource Acquisition Is Initialization)原则可以帮助我们解决这些问题。 最后,书中也会讨论...
在C#编程中,线程安全性和多线程交互是一个重要的主题。特别是在Windows Forms或WPF应用程序中,UI(用户界面)元素通常由主线程创建并管理,而其他后台线程可能需要与这些UI元素进行交互。这涉及到跨线程访问控件的...
由于Windows Forms或WPF等UI框架的控件是线程安全的,即它们只能由创建它们的线程(主线程)进行修改。因此,从属线程不能直接修改UI控件。这时就需要使用到“封送处理”(Marshalling),这是跨线程通信的一种机制...
本资源包含六个C#.NET多线程实例,涵盖了多线程的基本使用以及高级特性,如线程互斥,确保了线程安全和数据一致性。 1. **多线程基础**: - **创建线程**:在C#中,可以使用`Thread`类创建新线程。通过构造函数...