答案:严格来讲spring没有对单列做并发安全处理
解决安全问题:将singleton 改成 prototype
为什么会产生安全问题?
无状态bean:就是所谓的 这个bean中的参数没人用了, 一次request结束了,扔池子里,谁都可以用。
有状态bean:就是 正在使用的bean。
无状态bean其实没啥问题,那么有状态bean呢,这里有个场景,两个事务 t1和t2同时访问一个bean,在t1获取值得时候,t2已经修改完了,导致t1获取的值是t2修改过的值,这就发生了并发安全性问题。
解决方案就是上面说的prototype,原理是通过ThreadLocal 将两个事务分别分成两个块儿,每个块儿里备份一份变量和对象,自己执行自己的。 空间换时间的方案