原文:http://wuwenliang.net/2018/11/11/Spring单例Bean与多线程深度分析/
![f433f7c98113822cc8b0a97974707a54.png](https://img-blog.csdnimg.cn/img_convert/f433f7c98113822cc8b0a97974707a54.png)
接触过Spring框架的同学们都知道Spring的bean默认是单例的,在高并发下,如果在spring的单例bean中设置局部变量,则会发生并发问题。
最近在进行开发时,错误的在单例的bean中使用了成员变量,导致多个线程大并发访问时,出现赋值错误及日志打印混乱的问题。
本文就对单例bean及多线程安全的问题做一次较为深入的探讨,也是对自我的一次反省,之后的开发中,杜绝此类问题,修正开发习惯。
首先我们回顾一下单例模式的概念。
单例模式的意思是只有一个实例,例如在Spring容器中某一个类只有一个实例,而且自行实例化后并项整个系统提供这个实例,这个类称为单例类。
当多个用户同时请求一个服务时,容器会给每一个请求分配一个线程,这时多个线程会并发执行该请求对应的业务逻辑(成员方法),此时就要注意了,如果该处理逻辑中有对单例状态的修改(体现为该单例的
成员属性),则必须考虑线程同步问题。
一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都