SSH线程安全问题(线程) 5C

问个问题,
假设SSH中的action是多例的,假如类中Spring装配了别的类,但是装配的类是单例的,
而且装配的类里带有字段的,这样的action是线程安全吗?详细解答一下,谢谢各位

0

3个回答

这个要分情况的, 首先你要知道什么情况下会出现线程安全问题, 当多个线程需要共享状态时才会出现安全问题。
(所谓状态就类似对象里可以保存值的字段),你说的这种情况就是多个线程使用同一个对象,如果这个单例对象的字段只读实际上是不可变的
那就是线程安全的,但如果可变却没有用锁来保证操作原子性和一致性,那就是线程不安全的。

1

Structs2中的Bean默认的是单例,在整个程序运行期间,每个Bean只有一个实例,只要程序在运行,这个实例就一直存在。

对于Action来说,单例就容易出问题。如果客户端每次提交的参数都是一样的,后面提交的值把前面提交的值覆盖了,那问题还不是很大。但是如果存在可选参数的情况,比如上次提交的是参数1,下次提交的是参数2,但是由于是单例,此时参数1的值不是null,仍然是上次提交的那个值。这样就很容易出问题。

解决的办法就是把Action设置成多例的,每次请求都会生成一个Action的实例,这样多次提交的参数值就不会相互影响了。处理结束以后,Action的实例会被自动回收。和单例相比,多例可能会占用更多的内存,但是不会出bug。

把Bean设置成单例的方法:


把Bean设置成多例的方法:

0

有很大机率是不安全的,关键是不同的线程会否争用一个带状态的对象并有可能改变其状态。如是,则不安全,如果是threadlocal型变量,则可以。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于如何解决HashMap线程安全问题的介绍
HashMap为什么是线程不安全的?如何解决HashMap的线程不安全问题?
servlet线程安全问题
servlet线程安全问题servlet线程安全问题
线程问题出现与解决
线程问题总结:多线程实现方式、线程控制、多线程安全问题以及解决方法、单例懒汉式的线程安全问题、死锁出现的原因
c++ and Peris of Double Checked Locking
C++ 怎么解决 单例模式的线程安全问题
线程安全性
关于线程的使用!以及基本的安全问题的代码!
Singleton 单例模式的介绍以及解析
单例模式 Singleton 单例模式线程安全问题和拓展
Java线程池及观察者模式解决多线程意外死亡重启问题
Java线程池及观察者模式解决多线程意外死亡重启问题,附件含两个要运行代码!
C# 高效线程安全,解决多线程写txt日志类
C# 高效线程安全,解决多线程写txt日志类
unix_linux线程安全问题
里面主要是对unix_linux线程编程中的安全隐患的详细讨论!
ProC 线程安全问题案例
ProC 线程安全问题案例,多线程proc开发简单介绍
Stack 线程安全问题
栈的线程安全问题 的解决代码 push pop synchronized THread
struts1,struts2,webwork,线程安全问题
struts1,struts2,webwork,线程安全问题,easy518网 http://www.easy518.com/
线程安全的jdbc连接池
一个简单的jdbc连接池,考虑到线程安全,这里使用了ConcurrentLinkedQueue,新手入门,简单易懂
第一节(多线程通讯代码演示及解决线程安全问题)
第一节(多线程通讯代码演示及解决线程安全问题)
synchronized与单例的线程安全
synchronized与单例的线程安全问题,博客地址:https://www.jianshu.com/p/486ed9c8662a
C++实现的可以安全的暂停、继续、停止线程的线程类和Sample
在使用线程时,最麻烦的就是线程的同步控制,如暂停、继续、停止(包括暂停状态下)等。虽然微软提供了 SuspendThread、TerminateThread 等函数“似乎”可以完成这个功能,但如果你在代码里使用这些函数,则往往会遇到各种问题(比如SuspendThread时正好在CRT分配内存的锁中造成其他线程也跟着锁死,TerminateThread时资源未释放)等。 本人经过试验和总结,整理出可以安全的进行暂停、继续、停止线程执行的一个线程类,能非常方便的对线程进行控制。 附件里是源码和Sample程序,并有详细的使用说明。
【C#多线程】 动态创建多个线程后 需要关闭其中某个线程的解决实例。
例如: for (int i = 0; i < 5; i++) { Thread thread = new Thread(test) ; thread.Start(); } 如何关闭其中的一个线程呢? 请下载解决方案。 呵呵,这个实例10分值的买, 觉得好的话就评个分吧,评分后会返回你11分 (一定要评分,光评论是不返分的)
针对WAS6.1,对线程数、jvm,日志以及数据库连接进行性能调优
针对WAS6.1,对线程数、jvm,日志以及数据库连接进行性能调优
Windows下查看进程中的线程
Windows下查看进程中的线程
Log4j打印日志添加线程ID
区分每个请求用户,更好的跟踪分析解决问题(用户登录之后加上userId更佳)
java多线程之A线程等B、C线程都执行完在执行的结果示例
此前被面试问道一道面试题,B,C线程都有自己的任务,A线程要在B,C线程都结束后开始执行,并且不允许有A线程循环等待空耗CPU现象。
C++如何创建杀死线程
C++如何创建杀死线程
Windows线程封装类(VC++)
Windows线程封装类,使用类似ATL的Thunk技术。
java的thread类重写run方法的双线程从1加到100
java课上老师要求的小练习,使用的是继承Thread类来实现的。
procexp查看线程工具
Process Explorer是一個類似Windows「工作管理員」的程式,主要功能就是列出目前電腦中正在運行的全部程式以及跟運行中程式相關的全部詳細資料,讓我們可以在簡單的圖表與清單中,找出哪些程式佔用最多CPU資源、哪些執行序用掉最多記憶體以及其他更深入的資訊,方便對整個Windows系統做更完整的監控與管理。
Java线程(第三版).[美]Scott Oaks(带详细书签).pdf
线程(thread)是Java程序设计的基本要素,但学习如何有效率地运用它们是很重要的工作。《Java线程》这一经典图书的新版为你展示出如何完全地运用Java的threading功能且展示出在Java 2 Standard Edition Version 5.0(J2SE 5.0)上最新的变动。本书提供了完整的以及步骤详尽的thread程序设计方法。 Java的threading系统与其他的threading系统相较之下显得更为简单。在早期的Java版本中,简化是有利有弊的,如在其他threading系统上可以看到的某些高级功能在Java中是找不到的。J2SE 5.0改变了一切:它提供了非常多的与thread相关的新class,能够让撰写multithreaded程序的工作变得更简单。 《Java线程》第三版已经过完整的扩编与修订。本书完整收录了来自java.util.concurrent的并发功能。新的章节涵盖thread的性能、在Swing中使用thread、thread与Collection class、thread pool以及thread与I/O(传统的、新型的、中断的)。还无法配置J2SE 5.0的开发者可以借由附录中所提供的thread工具于较早的Java版本中达成类似的功能。 本书涵盖了以下主题: ·Lock starvation与死锁检测。 ·Atomic class与极简同步(J2SE 5.0)。 ·Swing、I/O以及Collection class与Java thread的交互。 ·程序化地控制lock与condition variable(J2SE 5.0)。 ·Thread的性能与安全性。 ·Thread pool (J2SE 5.0)。 ·Thread group。 ·特定平台上的thread调度。 ·Task scheduler(J2SE 5.0)。 ·多处理器环境下的并行循环。 Java线程(第三版) 目录: 前言 第一章 Thread导论  Java术语  关于范例  为何要用Thread 7  总结 第二章 Thread的创建与管理  什么是Thread 7  创建Thread  Thread的生命周期  两种停止Thread的方式  Runnable Interface  Thread与对象  总结 第三章 数据同步  Synchronized关键字  Volatile关键字  更多Race condition的讨论  明确的(explicit)Locking  Lock Scope  选择Locking机制  Nested Lock  死锁  Lock公平(Fairness)  总结 第四章 Thread Notifjcation.  等待与通知  条件变量  总结 第五章 极简同步技巧  能避免同步吗?  Atomic变量  Thread局部变量  总结 第六章 高级同步议题  同步术语  J2SE 5.0中加入的同步Class  防止死锁  死锁检测  Lock饥饿  总结 第七章 Thread与Swing  Swing Threading的限制  事件派发Thread的处理  使用invokeLater()与invokeAndWait()  长时间运行的事件回调  总结 第八章 Thread与Collection Class  Collection Class的概述  同步与Collection Class  生产者/消费者模式  使用Collection Class  总结 第九章 Thread调度  Thread调度的概述  以Thread优先级来调度  常见Threading的实现  总结 第十章 Thread Pool  为何要用Thread Pool?  Executor  使用Thread Pool  Queue与大小  创建Thread  Callable Task与Future结果  单一Thread化的访问  总结 第十一章 Task的调度  Task调度的概述  java.util.Timer Class  javax.SWing.Timer Class  ScheduledThreadPoolExecutor Class  总结 第十二章 Thread与I/O  传统的I/O服务器  新的I/O服务器  被中断的I/O  总结 第十三章 各种Thread议题  Thread Group  Thread与Java安全性  Daemon Thread  Thread与Class的加载  Thread与异常处理  Thread、StacK、内存的使用  总结 第十四章 Thread性能  性能的概述  同步的Collection  Atomic变量与有竞争的同步  Thread的创建与Thread Pool  总结 第十五章 多处理器计算机的并行化循环  对单一Threaded程序的并行化  多处理器扩大(scaling)  总结 附录 被撤换的Th reading功能 索引
TCP-接收线程和发送线程
C/C++多线程编程设计源代码。服务器端和客户端
qt推荐线程用法
qt多线程使用,推荐用法,继承QObject,使用worktothread方法。
C++ 如何正确的使用线程 释放线程资源
C++ 如何正确的使用线程 释放线程资源 魔鬼作坊学游戏辅助制作 moguizuofang.com
java 查看JVM中所有的线程的活动状况
java 查看JVM中所有的线程的活动状况 java 查看JVM中所有的线程的活动状况
posix和c11都实现的跨平台线程库
c++多线程,运用posix线程库,win下也可以用。真正实现跨平台,posix线程和c11线程可以切换(在define.h中USING_C11THREAD宏定义决定),实现相同的功能-线程池
操作系统线程实验报告
一个简单的操作系统实验报告,很简单,。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
java 同步阻塞并唤醒指定线程
java 多线程 同步阻塞 唤醒
delphi判断线程状态
delphi判断线程状态
线程的方法实现进度条更新
这个demo用线程来控制进度条的更新,使用了Handler和msg.
管理线程工具
用于电脑的进程和线程管理,日常使用电脑或者专业人士都必备的工具。
三线程分别显示各自时间
编写三个线程:各线程分别显示各自的运行时间,第一个线程每隔1秒钟运行一次,第二个每隔5秒钟运行一次,第三个线程每隔10秒钟运行一次。
delphi线程异常处理
delphi线程异常处理
C例子:线程标识符
该程序是我写的博客“一起talk C栗子吧(第一百一十回:C语言实例--线程标识符)”的配套程序,共享给大家使用
Delphi中用消息处理线程
Delphi中使用消息处理线程的例子,很好的例子。绝对分有所值。
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习java线程 线程java学习