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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
线程安全问题出现的原因和解决方法
线程安全问题的原因:多线程对同一共享资源进行了多操作。
SSM线程安全问题简述
在最早的struts2的框架中,由于当时Spring还没有引入,项目被加载到tomcat里,这时候前台有1000个请求,tomcat就会给它1000个线程,由于struts2是多例的,当时后台接值是装载在变量里的,这个时候由于属性只有一份,容易造成覆盖。并且由于struts2是多例,所以他在每一次都要1000个对象来处理访问请求,所以,这前后要创建3000个对象。对于资源也是极大的损耗。后来是St...
关于java线程安全问题
线程:负责一个进程中的代码执行。线程是进程中的一个执行路径。rnrnrn线程安全问题出现的根本原因:rn1. 存在着两个或者两个以上的线程。rn2. 多个线程共享了着一个资源, 而且操作资源的代码有多句。rnrnrnrnrn线程安全问题的解决方案:rnrn1. 使用同步代码块rnrn格式:rnsynchronized(锁对象){rn需要被同步的代码;rn}rnrn线程的生命周期状态图(线程总共有图
servlet线程安全问题
servlet线程安全问题servlet线程安全问题
hashmap 线程安全问题分析
1.问题引入nn开发过程使用了HashMap全局变量作为缓存nnHashMap<String, String> mCacheMapnn写(put)mCacheMap是线程Rnn读(get)mCacheMap是线程WnnHashmap是非线程安全的集合类,在此场景中RW分属于两个不同线程,会存在读写数据不一致性问题。比如W线程正在更新HashMap过程中,R线程同时读取HashMap,由...
java中线程安全问题如何解决?
线程安全问题解决方法:nn在代码中使用同步代码块(同步锁)nn解释:在某一段任务中,同一时间只允许一个线程执行任务,其他的线程即使抢到了cpu,也无法进入当前的任务区间,只有当nn当前的线程将任务执行完后,其他的线程才有资格进入.nn同步代码块的构成:nnsynchronized(锁(对象)){nn     同步的代码nn}nn作为锁对象的要求:nn1.必须是对象nn2.必须保证被多线程共享nn可...
Java线程安全问题理解
进程nn电脑会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的。如下图中的Chrome浏览器等等。nnnn线程nn进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。nn串行:其实是相对于单条线程来执行多个任务来说的,我们就拿下载文件来举个例子:当我们下载多个文件时,在串行中它是按照一定的顺序去进行下载的,也就是说,必...
单例模式涉及到的线程安全问题
1.单例模式单例模式分为饿汉式和懒汉式,也即 即时加载和懒加载的分别 n下面分别看两个形式:1.1饿汉式class SingleHungry{n //1.首先私有化构造器,这样使该类不可以被其他对象创建对象n //2.自己内部创建对象n //3.写一个静态方法让外部调用实例n private static Single s = new Single();n //上面一句
java多线程高并发线程安全问题
在抢购之类的业务处理时,会出现超发之类的线程安全问题。我个人想到的解决方法如下:采用数据库锁,悲观锁有效率低下问题,所以我推荐乐观锁,虽然会增大CPU开销,很多服务和软件都支持乐观锁,如Redis的watch采用FIFO队列,强行把多线程变成单线程,但是也会出现队列内存爆满问题采用同步代码块,只给数据库操作的代码加锁,提高效率,对不同数据记录操作采用不同的锁...
java线程安全问题产生的原因
    最近工作中遇到不少多线程问题,但自己一直对多线程的理解比较表层。没有深入探究。正是最近工作中遇到的问题,致使我深入的去了解多线程安全问题为什么会产生。    多线程使我们的计算机可以同时运行多个程序,感觉很美好。    but,多线程的安全问题,到底怎么回事,到底怎么来的,对于有点理想主义的我来说这简直就是BUG。    网上有不少介绍多线程产生的原因的。我大致看了一遍,感觉都介绍的太粗线...
线程:并发安全性问题
线程:并发安全性问题:nn一:线程概述:nn1:进程:nn学习线程之前,我们必须要知道什么是进程。nn进程是计算机中特定功能的程序再数据集上的一次运行。如,我们现在打开的word软件这就是一个进程。nn nnnn nn2:线程:nn线程是进程的一个单元,一个运行中的进程,内部可能有多个线程。也就是说线程要比进程的粒度小。nn如:音乐播放器,一次只能播放一首歌,这首歌播放完毕后,才可以播放下一首,这...
集合的线程安全问题
集合的线程安全问题nn之前一直对Arraylist、Linkedlist的线程安全问题比较模糊,今天特意将ArrayList、Linkedlist、Vector三个集合进行线程安全测试nn代码如下:nnimport java.util.ArrayList; nimport java.util.LinkedList; nimport java.util.List; nimport java.util...
java多线程(6)--多线程的安全问题总结
1、多线程安全问题分析n  多线程安全问题原因是在cpu执行多线程时,在执行的过程中可能随时切换到其他的线程上执行。n  n  在以上红色选中的三个部分,线程都有可能进行切换。只要cpu在这个三个地中的任何地方切换了,都可能导致错误数据出现,线程的不安全因素就有了。n n  造成错误数据的原因是多个线程可能出现同时访问num的情况。而任何一个线程在访问num的过程中都可以切换到其他的线程
HashMap线程安全问题
HashMap线程安全吗?nn解决方法:nnHashMap不能被多个线程所操作,如果想在多线程中使用键值对的数据结构,则http://www.yayihouse.com/yayishuwu/chapter/1530
java多线程之多线程的线程安全问题
什么是线程安全问题?如何解决线程安全问题? n现在就进入正题,解答上述问题: n当多个线程同时操作同一个共享全局变量的时候,就容易出现线程安全问题,线程安全问题只会影响到线程对同一个共享的全局变量的写操作。 n接下来就为大家演示一个线程安全问题:nnnnpackage com.java.threadSecurity;nn/**n * @Author:Mr.Liun * @Description:线
Java 锁机制 - 说说线程安全问题
学习完整课程请移步 互联网 Java 全栈工程师nn线程安全是多线程领域的问题,线程安全可以简单理解为一个方法或者一个实例可以在多线程环境中使用而不会出现问题。n在 Java 多线程编程当中,提供了多种实现 Java 线程安全的方式:nn最简单的方式,使用 Synchronization 关键字n使用 java.util.concurrent.atomi...
Java并发编程1 —— 线程安全问题是如何产生的
前提nn在研究线程安全问题之前,有必要简单回顾一下jvm内存模型。nn如下图所示,jvm内存模型可分成两大部分,即主存区和jvm内存。nnnn主存区又叫做共享内存,顾名思义,是各个线程运行时所共享的内存区域,用来存放类加载时产生的对象实例,以及共享变量、静态变量、常量等。jvm内存为线程私有,即每个线程独享该内存,用来存放局部变量、方法信息等。nn当线程需要访问共享变量时,首先需要从共享内存中读取...
多线程安全问题以及解决安全问题的原理
多线程安全问题的原因:rn通过图解:发现一个线程在执行多条语句时,并运算同一个数据时,在执行过程中,其他线程参与进来,并操作了这个数据。导致到了错误数据的产生。rn rn涉及到两个因素:rn1,多个线程在操作共享数据。rn2,有多条语句对共享数据进行运算。rn原因:这多条语句,在某一个时刻被一个线程执行时,还没有执行完,就被其他线程执行了。rn rn解决安全问题的原理:rn只要将操作共享数据的语句
Java线程并发与安全性问题详解
同步异步-线程并发安全问题nnn什么是并发n线程并发安全问题n同步与异步n同步锁n生产者与消费者模型nnnnnnn什么是并发nn想要解决线程并发安全问题,那首先要弄清楚什么是并发? n - 线程的并发原理: n - 我们先举一个例子,如果让你同时吃西瓜和米饭,你会怎么吃呢?我们来模拟一下:1)吃一口梨,吃一口米饭2)吃几口梨,吃几口米饭3)吃完梨再吃米饭。当然了,具体怎么吃要看你的心情,并...
Android线程安全问题分析与解决
问题描述nnandroid.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. n ...
Java之线程安全问题的3种处理方式(通过线程同步)
n出现线程安全问题我们如何处理??  ==》同步原理n    1.同步方法:synchronized 修饰的方法      ex:public synchronized void test(){}n              弊端:方法中的所有代码,都只允许一个线程访问。n(有一种情况:一个方法中,有一个部分代码不会涉及到线程安全问题,可以允许多个线程同时访问 == 》即下面的2.同步代码块)n ...
学习笔记之Java线程安全杂谈(上)——线程安全概念和基本方案
线程安全问题绝对是并发开发中一个重点中的重点,这篇就来说说线程安全相关的一些问题。线程安全是什么概念?这个概念说简单也简单,说复杂也复杂,“安全”的概念是什么,用我个人的话说的浅显些,就是类/对象本身在多线程并发执行的场景下,能够保证程序的逻辑是可以接受的而不是被扰乱的,保证业务处理不出问题,这个定义并不标准,但线程安全的实际概念确实很难简单而又准确地表达,我们从下面的故事说起。rnrn我们前面也
用于解决多线程安全问题的三种方式
用于解决多线程安全问题的方式:n1. 同步代码块 (隐式锁)n2. 同步方法(隐式锁)n3. 同步锁 Lock( jdk 1.5 后)n 注意:是一个显示锁,需要通过 lock() 方法上锁,必须通过 unlock() 方法进行释放锁nn下面举一个售票例子:nn1)同步代码块nnnpackage com.lxj.juc;nnpublic class TestSync {nn public stat...
如何避免线程安全性问题
线程安全性问题成因nn多线程环境n多个线程操作同一共享资源n对该共享资源进行非原子性操作nn如何避免n打破成因中三点中任一点nn多线程环境 – 将多线程改单线程(必要的代码加锁访问)n多个线程操作同一共享资源 – 不共享资源(ThreadLocal、不共享、操作无状态、不可变)n对共享资源进行了非原子性操作 – 将非原子性操作改成原子性操作(加锁、使用JDK自带的原子性操作的类、JUC提供的相应的...
创建线程的两种方式和线程的安全性问题
一:创建线程的两种方式rn1.继承Thread类rn//继承Thread类实现多线程n//经典案例:火车票购票nclass Train extends Thread{n private int tic;nn @Overriden public void run() {n for(tic=20;tic>0;tic--){n System.out.println(tic);n }n }n n
局部变量线程安全的理解
如何理解局部变量线程安全
SpringMVC线程安全问题
spring生成对象默认是单例(也就是一个对象)的。通过scope属性可以更改为多例。nn nn<bean id="singleton" class="java.util.Date" scope="singleton"></bean>  <!--单例-->n<bean id="prototype" class="java.
线程安全问题(迸发)入门知识总结
关于Java解决线程冲突的方法简单总结nn1.在方法面前使用synchronized或者使用方法块n2.使用各种锁lock,Reentrantlock,读写锁n3.使用volatile保证可见性n4.使用ThreadLock复制变量副本n5.java.util.concurrent的API及StringBuffernn解决线程安全问题的各种方法的具体实现nnA.Synchronizednnsync...
多线程安全性问题的原因
线程安全性问题满足以下三个条件:nn多线程n多个线程共享一个资源n对资源进行非原子性操作(如a++读写操作)nnn
线程安全性问题总结
一、出现线程安全性问题的条件nn(1)在多线程的环境下 n(2)必须有共享资源 n(3)对共享资源进行非原子性操作nnnn二、解决线程安全性问题的途径nn(1)synchronized (偏向锁,轻量级锁,重量级锁) n(2)volatile n(2)JDK提供的原子类 n(3)使用Lock(共享锁,排它锁) n(4)认识的“*锁”nnnn三、常用的锁nn偏向锁 n轻量级锁 n重量级锁 n重入锁 ...
servlet是否存在线程安全问题
        今天老师问了一句,servlet存在线程安全问题吗,心想着servlet不是单例的嘛,每个线程在调用的时候都会为实例对象分配独立的引用。我就以为servlet属于线程安全的。晚上自己再网上查看了一下,发现servlet不是安全的。        下面就给大家介绍一下servlet线程安全问题        首先,默认的servlet是非线程安全的,servlet是单例模式,只产生一...
多线程的安全性,就是“线程安全问题都是由全局变量及静态变量引起的”
多线程的安全性,就是“线程安全问题都是由全局变量及静态变量引起的”。“线程安全问题都是由全局变量及静态变量引起的”,就这么简单。
静态内部类-以及它的线程安全问题
最近用上了静态内部类,作为建造者模式.n自然就会有个疑问.静态内部类,会不会有线程安全的问题?因为静态的,那么这个静态内部类是所有的外部类实例共用一个呢(这样会有线程安全的问题),n还是每个实例有自己对应的静态内部类实例?(这样不会有线程安全的问题)n根据测试结果,静态内部成员类,没有出现线程安全的问题.ncom.itrus.portal.common.test.DuoShuXingGouZhao...
线程同步:解决线程安全问题
    多线程安全问题,是由于多个线程在访问共享的数据(共享的资源),并且操作共享数据的语句不止一条。那么这样在多条操作共享数据的之间线程就可能发生切换,从而引发线程安全问题。例如如下情况:public class ThreadDemo {n public static void main(String[] args){n Apple apple = new Apple();n Th...
SpringMvc线程安全问题(个人感悟)
由于springmvc是singleton的,所以假如存在全局变量时就容易导致线程安全问题,线程安全问题其实归根结底就是数据共享问题,这就又牵扯到java虚拟机的内存结构了,每一个线程都会有自己的工作内存,还有一块公用的内存,共享内存,我们定义好的一个变量放在共享内存中,每当一个线程对全局变量进行操作时,都会与共享内存中的保存的全局变量的值进行比较。Spring MVC默认是单例模式,Contro...
浅谈SimpleDateFormat的线程安全问题
浅谈SimpleDateFormat的线程安全问题在实际项目中,我们经常需要将日期在String和Date之间做转化,此时需要使用SimpleDateFormat类。使用SimpleDateFormat类的parse方法,可以将满足格式要求的字符串转换成Date对象,使用SimpleDateFormat类的format方法,可以将Date类型的对象转换成一定格式的字符串!但是有一点需要特别注意,S...
js 中线程及线程安全
for (var i = 0; i < 10; i++) {n setTimeout(function () {n console.log(i); n },0);n }nni = 10 这是因为 i 的作用域被提升为全局 n只要将var 改成 let 就可以了。...
Java多线程安全问题及解决方案
Java多线程安全问题及解决方案n一、问题引入n通过最常见的多窗口售票问题引入线程安全的问题。代码如下:n注:这里使用Runnable接口来实现线程,这样做是为了共享代售票这个资源,如果我们使用继承Thread来操作,需要将代售票ticketCount设置为全局的公共变量才能实现效果。npackage com.example.thread.one;nnpublic class Thread
java多线程_从售票模拟浅谈线程安全问题
初步编写售票程序nnn定义票数临界区,实现Ranable接口nnnnnclass TicketCount implements Runnable{n private int tiketCount = 100 ;n @Overriden public void run() {n // TODO Auto-generated method stubn wh...
Java中变量的线程安全问题
[b]静态变量:线程非安全。rn[/b]rn静态变量即类变量,位于方法区,为所有对象共享,共享一份内存,一旦静态变量被修改,其他对象均对修改可见,故线程非安全。rnrn[b]实例变量:单例模式(只有一个对象实例存在)线程非安全,非单例线程安全。[/b]rnrn实例变量为对象实例私有,在虚拟机的堆中分配,若在系统中只存在一个此对象的实例,在多线程环境下,“犹如”静态变量那样,被某个线程修改后,其他线...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习java线程 线程java学习