结论:如果Bean有修改成员变量的方法就不是线程安全的,否则就线程安全
为什么:
首先,需要搞清楚什么是单例Bean,就是全局默认一份,如果Bean有修改内部成员变量的方法,被多个线程同时修改,肯定是存在线程安全问题的。
所以,并发访问数据 + Spring对单例Bean没有并发处理 = 必定存在线程安全问题隐患
解决方案:
(1)最简单的方式就是不使用单例模式,使用原型模式。每次请求获取的Bean都是一个全新的Bean,不存在并发访问也就是线程安全的
(2)ThreadLocal。比如数据库事务的实现方式,就是使用ThreadLocal,每个线程都有一份线程私有的Connection
(3)CAS、Synchronized、Lock保证线程同步