spring的controller和service是否线程安全?

先上代码

 public String deleteNews(Integer id){
        String ret;
        logger.debug("mydebug news id:"+id);
        News news=newsService.selectNewsById(id);
        Types types=news.getTypesEnti();
        if (types.getOnechildOnly()==1){
            ret=ReturnFormat.retParam(2,null);
            return ret;
        }else{
            int no=newsService.deleteNewsById(id);
            if (no>0){
                ret= ReturnFormat.retParam(0,null);
            }else{
                ret=ReturnFormat.retParam(1,null);
            }
            return ret;
        }
    }

我先传一个types.getOnechildOnly()==1的news ID,这时是正常的
然后我再传一个types.getOnechildOnly()!=1的ID,这个时候也是正常的,
但是当我再重复1和2步骤时,newsService.selectNewsById(id);有时候会出现
空值情况.我打印了下,好像他删除的还是前一个已经删除的id,这种情况怎么处理?

2个回答

线程安不安全取决于你怎么用,反正记住一点,共享资源不要定义全局的变量,只定义常量和注入的bean,这样基本不会有线程安全问题的出现。

qq_39440156
一页书_ 回复shuiguowudi: 不一定一定线程安全,如果你services里面有全局变量,比如定义了一个全局i,多个方法使用了这个i,这个i就会有线程安全问题
大约一年之前 回复
shuiguowudi
shuiguowudi 大侠,controller里面注入的services为什么不会导致线程安全问题呢?
一年多之前 回复

通常都是 调用 controller 和service里面的方法, 方法是在虚拟机栈中执行的 每个线程都有各自的栈空间, 所以没有线程安全问题,
但是如果在 controller类中 定义了 属性, 并且在方法中使用, 这个时候就存在线程安全问题了.因为多个线程共享 controller的对象实例的属性.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Spring MVC Controller线程安全性问题
Spring MVC默认是单例模式,Controller、Service、Dao都是单例所以在使用不当存在一定的安全隐患。Controller单例模式的好处在与: 1. 提高性能,不用每次创建Controller实例,减少了对象创建和垃圾收集的时间 2. 根本就不需要多例 由于只有一个Controller的实例,当多个线程同时调用它的时候,它的成员变量就不是线程安全的。 当然在大多
spring是否线程安全
spring 管理的bean默认是单例的,可通过 scope 属性设置scope=”singleton” 默认是单例,可修改为scope=”prototype” 此时将不再是单例模式 spring bean默认是饿汉式 初始化时就会创建bean的实例,另外spring的单例时相对于spring容器, 设计模式中的单例模式时相对于JVM, JVM可以有多个容器。 所以spring使用中是线程...
Spring MVC的Controller是线程安全的么?
众所周知,Struts2的Action因为每次请求都会创建一个实例,所以不存在线程不安全的问题。。rn 但是Sprng MVC的Controller我是用的扫描的方式,在servletname-servlet.xml配置的,Spring IOC搞的Bean默认是单例模式吧?rn我这么扫描Controller是不是就是单例的,会不会出现跟Servlet一样使用成员变量的线程安全问题????rn如果加@Scope("prototype")其实可以解决,工作中大家都是怎么解决的?会不会影响性能??????
怎么理解Spring MVC Controller线程安全性问题
今天分享一道Java面试题:   怎么理解Spring MVC Controller线程安全性问题?   查阅相关的资料得到这些知识 分享给大家:   spring生成对象默认是单例(也就是一个对象)的。通过scope属性可以更改为多例。   第一部分:验证Spring生成对象默认是单例的。   下面我们来一个网上的例子验证一下: bean id="sin
spring的aop是否线程安全(个人见解)
spring的默认bean的scope是singleton,因此不做特殊配置的话,每次请求 使用的aspect 都是同一实例。需要注意用ThreadLocal包装业务变量。
Spring controller 和 service的并发以及单多例
          controller 和service的单例和多例在很多时候其实都有并发问题的影响,但是绝大多数情况,很多人没有在意,只有踩坑了才发现。            按照我以前的测试,可以发现,controller层如果不输入@Scope("prototype"),那么默认是单例的,但是controller 里的@Autowired呢?又晕了,干脆自己做了个简单的测试。 cont...
关于Spring的@Controller @Service等的线程安全问题
首先问@Controller @Service是不是线程安全的? 答:默认配置下不是的。为啥呢?因为默认情况下@Controller没有加上@Scope,没有加@Scope就是默认值singleton,单例的。意思就是系统只会初始化一次Controller容器,所以每次请求的都是同一个Controller容器,当然是非线程安全的。举个栗子: @RestController public clas...
Spring AOP 导致Controller注入service失败
如题今天我加了spring aop基于这个做的日志操作记录,配置好了 里面写的方法也执行了 但是再返回controller的时候,发现注入的service为空,因此也一直保存空指针。。。 注: 配置的aop保存日志保存进去了
spring mvc controller怎样注入service?
controller使用注解方式来实现的. 在配置文件中为此控制器注入service.rn但是直接调用控制器会报空指针,原因是我没有调用已注入的控制器,也就是配置文件中配置好的控制器.rnrn请问如何让控制器自动注入service?
Spring注解 @Component、@Repository、@Service、@Controller区别
Spring注解 @Component、@Repository、@Service、@Controller区别,有兴趣的可能看一下。
Spring 中的线程安全性
Spring与线程安全 Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”。但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码。 Spring对每个bean提供了一个scope属性来表示该bean的作用域。它是bean的生命周期。例如,一个scope为singleton的bean,在第一次被注入时,会创建为一个单
Spring与线程安全
Spring作为一个IOC容器帮助我们管理了许多bean,但Spring并没有保证它们的线程安全,而是将这个任务交给了开发者。 Spring在创建Bean时需要为其设置作用于,以singleton为例,它是Spring的默认作用域即单例模式,它的生命周期和Spring容器是一致的,只在第一次注入时会被创建,另一个prototype,每次注入都会创建。 无状态的对象很适合以singleton,它...
spring线程安全
spring mvc 默认是单例的,controller,service ,dao层都只有一个实例 程序是基于方法访问的,通过形参传入实际的参数,因此,处理的数据并不是共享的,每一个线程都有自己的一份,是线程安全的。 但如果类里面有成员变量,则每一个线程都会访问到它,是线程不安全的。 Java里有个API叫做ThreadLocal,spring单例模式下用它来切换不同线程之间的参数。 用Threa...
spring与线程安全
https://blog.csdn.net/csdnlijingran/article/details/83094756
Spring源码解析-7、spring容器中的Bean是否线程安全?
Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的Bean去研究。 spring 的 bean 有哪些scope[作用域] 1、singleton:单例。【默认】 2、prototype:原型,每次创建一个新对象 3、request:请求,每次Http请求创建一个新对...
Netsvc.exe (Command-line Service Controller)
一个命令行工具,用来控制服务,和SC比较类似,但是在功能上要比后者少很多!用这个工具基本上可以进行远 程启动,停止,暂停,继续服务或者查询一个服务的状态。基本上只要你是一个普通用户就可以执行这个命令,当然如果要启动和停止的话,就需要相应的权限了。 当然和SC相比Netsvc有很大的局限性,所以在这里我多说一点和服务有关的东西。 在Win2k虽然你可以对各种服务进行查询,但是并不是所有的服务都可以直接关闭,比如Workstation这个服务 语法: netsvc command servicename \\computername /?│/help command可以是以下几个命令: /list 列出已经安装的服务,这个时候不使用servicename。 /query 查询一个服务的状态。 /start 启动服务 /continue
@Component @Controller @Service @Repository
Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架
关于controller service 的修改
我的修改 两张表 我的controller service 可以收到我改的另外一张表的信息 但是我的数据库不会发生改变rn
Controller Service Dao 关系
这是一个平台的底层代码.我基础差,不明白其中的关系和为什么.rn希望那位大神帮我屡屡,让我理解理解,rn类和接口,抽象类,类泛型.我都不明白!rn谢谢大神了!rn也可以加我的QQ:95546772一起讨论,rn或者您在北京我可以当面请教您!rnrn[code=java]public class UserController extends WAFController rnrn[/code]rnUserController.javarnrnrn[code=java]public class UserService extends WAFService rnrn[/code]rnUserService.javarnrn[code=java]public class UserDAO extends DAOSupport rnrn[/code]rnUserDAO.javarnrn[code=java]public abstract class WAFController> extends BaseController rnrn[/code]rnWAFController.javarnrn[code=java]public abstract class WAFService extends BaseService rnrn[/code]rnWAFService.javarnrn[code=java]public abstract class BaseController> rnrn[/code]rnBaseController.javarnrn[code=java]public abstract class BaseService rnrn[/code]rnBaseService.javarnrn[code=java]public class DAOSupport implements DAO rnrn[/code]rnDAOSupport.javarnrn[code=java]public interface DAO rnrn[/code]rnDAO.java
线程安全spring mvc controller java.io.IOException: Stream closed异常
程序的流程是客户端发送一个Http post请求请求的内容是一个xml文件,服务器通过spring mvc 的controller接收rn然后response 返回xmlrn@Controllerrnpublic class QueryController rn public ModelAndView handleRequest(HttpServletRequest request,rn HttpServletResponse response) throws Exception rnrn //业务处理.....rn rnrnrn类似上面的调用,间隔时间比较短的情况下会出现下面的异常,分析原因是Spring MVC的controller不是线程安全的,每次请求都是同一个servlet,当第一次请求的reponse或request关闭后,接下来的请求就会出现stream closed的情况。rnrn尝试了几种方式:rn1.用ThreadLocal管理request response 问题依然存在rn2.尝试把处理写成无状态,线程安全的视乎很难rn3.SingleThreadModel ,synchronized 管理好像也不行,感觉无法控制response和request对象。rnrn现在的想法是把这个servlet变成线程安全,尝试了下视乎配置的不对,希望大家指点。rnrn还有就是像这样的业务比较好的解决方法是什么,也请大家分享一下。rnrnrnrnrnjava.io.IOException: Stream closedrn at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:406)rn at org.apache.catalina.connector.CoyoteReader.read(CoyoteReader.java:105)rn at org.apache.xmlbeans.impl.piccolo.xml.XMLReaderReader.fillCharBuffer(XMLReaderReader.java:247)rn at org.apache.xmlbeans.impl.piccolo.xml.XMLReaderReader.reset(XMLReaderReader.java:84)rn at org.apache.xmlbeans.impl.piccolo.xml.DocumentEntity.open(DocumentEntity.java:74)rn at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.reset(PiccoloLexer.java:982)rn at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:709)rn at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3454)rn at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1329)rn at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1316)rn at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:360)rn at org.poc.pos.obervationQuery.QueryObservationRequestDocument$Factory.parse(Unknown Source)rn at com.yuxin.referral.services.ObservationQueryServiceImpl.ObservationQueryRequest(ObservationQueryServiceImpl.java:79)rn at com.yuxin.referral.services.ObservationQueryServiceImpl$$FastClassByCGLIB$$27758ac0.invoke()rn at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)rn at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:692)rn at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)rn at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)rn at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)rn at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)rn at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)rn at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625)rn at com.yuxin.referral.services.ObservationQueryServiceImpl$$EnhancerByCGLIB$$e00082b7.ObservationQueryRequest()rn at com.yuxin.referral.web.ObservationQueryController.handleRequest(ObservationQueryController.java:31)rn at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)rn at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)rn at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)rn at java.lang.reflect.Method.invoke(Method.java:597)rn at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710)rn at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167)rn at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414)rn at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402)rn at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)rn at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)rn at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)rn at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)rn at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)rn at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)rn at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)rn at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)rn at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)rn at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)rn at com.springsource.metrics.collection.web.HttpRequestMetricCollectionValve.invoke(HttpRequestMetricCollectionValve.java:44)rn at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)rn at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)rn at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)rn at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)rn at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)rn at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)rn at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:379)rn at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)rn at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)rn at java.lang.Thread.run(Thread.java:619)rn
Spring单例Bean和线程安全
Spring单例Bean和线程安全 Spring的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?例如对于Web应用来说,Web容器对于每个用户请求都创建一个单独的Sevlet线程来处理请求,引入Spring框架之后,每个Action都是单例的,那么对于Spring托管的单例Service Bean,如何保证其安全呢?本文介绍了以上的安全问题。 Spring的原型...
Spring Bean单例与线程安全
https://www.cnblogs.com/redcool/p/6398760.html
perror()是否线程安全?
rn根据文档,如果放在第一个引用,那么errno是线程安全的。rnrnstrerror()因为复用一个内存体,是线程不安全的,需要用strerror_r()。rnrnperror()看描述是采用数组来存储错误字符串的,理论应该线程安全的。但man文档并没有提到。有哪位达人试过否?rnrnrn感觉strerror和perror非常类似,为啥会搞出两套体系呢?历史原因?
mysql api是否线程安全
如题,请哪位大侠解答
hashmap是否线程安全?
我在jsp里用到了一个自己的类a,这个类a有个静态成员是hashmap类,网上很多文章提到hashmap不是线程安全的,但是我这里只是读此静态成员,它的修改,我也在这个类a里写了一个静态方法,不知道这样是否可行,谢谢高手指点一二
&和&&的区别 i++是否线程安全
1、&和&&的区别 &的用法 第一个是作为逻辑运算符使用,被当成逻辑运算符时有一个非短路的特性,即当第一个操作数为false时,那么第二个操作数仍然执行。 第二个操作是作为位运算使用 &&用法 只有一个用法,只能作为逻辑运算符使用,在使用时有短路的特性,即当第一个操作数为false时,第二个操作数不会执行 2、i++是否线程安全 i++的线程...
TJvLogFile 是否线程安全
如题
Spring 并发线程安全性问题
基础知识参考Spring 并发访问的线程安全性问题总结:Spring 容器中创建的bean对象都是单例模式(默认)、比如常用的注解:@Controller、@Service、@Dao等,也可以通过@Scope("prototype")在类的声明中,来改成多实例,注意:在@Controller中如果是默认单例,即使@Service、@Dao是多实例的,你得到的也是单例的结果,但是我们一般不会设置成多...
Action是否线程安全
Action是否线程安全 Action是否线程安全 Action是否线程安全
关于7-zip是否线程安全
本人使用了7-zip的lzma算法库,发现多个线程同时调用压缩功能时,好像压出来的数据是有问题的。不知哪位高人能否出来鉴定一下,不胜感激
如何测试程序是否线程安全
例如 测试ArrayListrn是否线程安全
new 操作是否线程安全?
有没有可能两个线程同时检测到同一块内存可用,从而导致冲突?
关于spring线程安全的问题
在类中,如果使用成员变量,当在高并发的情况下就会出现,这个线程刚使用单例对象进行属性设置,还未使用的情况下,另一个进程已经将单利对象的数据进行修改属性完成,则远来线程获取到的单例就是一个脏对象不可使用。所以应该使用@Scope("prototype")注解。或者是使用成员变量。...
Spring中的线程安全
https://juejin.im/post/5a0045ef5188254de169968e
spring的DispatcherServlet不是线程安全的.
大概看了一下tomcat实例化servlet的源代码,和spring mvc的DispatcherServlet的源代码,现在问题来了,spring的DispatcherServlet不是线程安全的. 我看的源代码版本是:tomcat 7.0.57 spring 3.0.5. 重点查看了org.apache.catalina.core.StandardWrapper和DispatcherSe...
Spring的单例与线程安全
Q:spring默认是单例模式,也就是说在MVC中,一个请求传递过来内存中只会有一个controller对象,使用注入的话service和dao也都是单例模式的,为什么没有出现线程安全问题呢? A:service是单例的没有错,但是在数据传递过程中使用的pojo并不是,而是每次使用时new出来的(也叫有状态对象),所以不会存在线程安全问题。 Q:那什么情况下才会出现线程安全问题? A:**线程安全...
Java中不同容器类是否线程安全
非线程安全线程安全 ArrayList LinkedList Vector HashMap HashTable StringBuilder StringBuffer 区别 容器类线程安全, 非线程安全的区别可以用下面这个例子来表...
GetQueuedCompletionStatus是否线程安全的?
GetQueuedCompletionStatus是否线程安全的?
一个函数是否线程安全
怎么知道?哪里有相关的资料?
jackson的ObjectMapper是否线程安全
jackson中的ObjectMapper是否线程安全,能否单例生成全局使用rn请大神帮忙解释下,有测试用例就更好了
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview