spring当中bean为什么线程不全?


面试官问: 请问spring是线程安全的吗?

你: 不是线程安全的!!!!

面试官问: 为什么不是线程安全的?

你:因为Spring是单例的。

面试官问:为什么单例的就不是线程安全的那

你:what!!!


spring当中bean为什么线程不全?

如果只是回答道这里,那结果可想而知。一般面试官问的这些问题,我觉得是有两层意思,一个意思是就是考你是否知道这个点,另一是考下你的理解。

俗话说人有千样性,书有千百脸,不同的人有不同的观点。那么接下来谈谈我的理解!!

首先spring当中是单例模式,当请求到tomcat时,tomcat创建一个线程去访问controller层。当N个用户操作时,tomcat创建N个线程去访问controller层,这个时候你上一个线程修改完这个bean后并没有结束,而是让出了cpu,下一个线程去访问。携带参数去修改数据,然后让出cpu。这个时候cpu又让给了第一个线程,继续往下走。

如下图:


spring当中bean为什么线程不全?



这个时候问题来了,第一个线程拿到的值,还是第一个线程得到的值,还是线程二修改过的值?

没错是线程二的值,为什么呢?因为bean只有一份,每次访问的内存地址都是相同的,所以每次修改的对象也是相同的。也是并发安全的原因。

spring当中bean为什么线程不全?

那么有什么解决办法那?

1.synchronized关键字修饰方法,或方法块

2.修改spring bean默认单例

3.ThreadLocal 副本操作。

spring当中bean为什么线程不全?

内容隐藏了2个知识点,一个是tomcat创建线程,一个是声明bean。有兴趣的可以自己去看下或者等以后的叙述。

展开阅读全文

页面更新:2024-04-14

标签:线程   知识点   副本   可想而知   俗话   关键字   观点   对象   内存   声明   参数   原因   模式   操作   方法

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top