spring单列线程安全吗?

mac2024-01-26  35

答案:严格来讲spring没有对单列做并发安全处理

解决安全问题:将singleton 改成 prototype

 

为什么会产生安全问题?

无状态bean:就是所谓的 这个bean中的参数没人用了, 一次request结束了,扔池子里,谁都可以用。

有状态bean:就是 正在使用的bean。

无状态bean其实没啥问题,那么有状态bean呢,这里有个场景,两个事务 t1和t2同时访问一个bean,在t1获取值得时候,t2已经修改完了,导致t1获取的值是t2修改过的值,这就发生了并发安全性问题。

解决方案就是上面说的prototype,原理是通过ThreadLocal 将两个事务分别分成两个块儿,每个块儿里备份一份变量和对象,自己执行自己的。  空间换时间的方案

最新回复(0)