spring

1 Spring 中的 bean 是线程安全的吗?

如果是prototype:原型,每次创建一个新对象。
如果是单例,所有线程都共享一个单实例Bean,因此是存在资源的竞争。

如果单例Bean,是一个无状态Bean,
也就是线程中的操作不会对Bean的成员执行查询以外的操作,
那么这个单例Bean是线程安全 的。比如Spring mvc 的 Controller、Service、Dao等,这些Bean大多是无状态的,

实际上大部分时间Bean是无状态的(比如Dao)
所以说在某种程度上来说Bean其实是安全的。

但是如果Bean是有状态的
那就需要开发人员自己来进行线程安全的保证,最简单的办法就是改变bean的作用域 把 "singleton"改
为’‘protopyte’ 这样每次请求Bean就相当于是 new Bean() 这样就可以保证线程的安全了。

有状态就是有数据存储功能
无状态就是不会保存数据

controller、service和dao层本身并不是线程安全的,
如果只是调用里面的方法,
而且多线程调用一个实例的方法,会在内存中复制变量,这是自己的线程的私有工作内存,是安全的。

所以其实任何无状态单例都是线程安全的。

posted @ 2021-12-12 09:31  姚狗蛋  阅读(5)  评论(0编辑  收藏  举报