学习记录.spring中的单例bean是线程安全的吗?

作用域:

singleton(单例):spring默认作用域,每一个bean在容器中仅有一个实例.(因为只有一个实例,当多个线程都执行该实例的同一个业务逻辑(成员方法)并且这个业务逻辑有对bean自身的成员变量进行修改,就会存在线程安全问题)

prototype(原型):每次getbean都创建一个新实例.(你有我有大家有,自然不存在竞争,也不存在线程安全问题了)


无状态bean:对于自身的成员变量只查询,不修改的bean,即不会做数据存储的bean.

有状态bean:对于自身的成员变量会做修改的bean,即有数据存储功能的bean.


答:spring并没有提供线程安全策略,因此,spring的单例bean其本身是不具备线程安全的特性的.

但是我们经常在项目中使用的bean都是无状态bean,比如Service类和Dao类.所以从某种程度上来说spring的单例bean是线程安全的.

 如果确实需要使用有状态bean,最简单的方法是将@Scope注解的值改为prototype.

或者将会变的成员变量保存在ThreadLocal中,TreadLocal本身具备线程隔离的特性,这样的话,每个线程都有自己的变量副本,只需要操作自己的变量副本就行.


总结:spring的单例bean本身不具备线程安全特性.如果使用无状态bean,则不需要考虑线程安全问题;如果使用有状态bean,就需要开发者自己保证线程安全和并发问题.


参考文章:

Spring中的Bean是线程安全的吗? - 知乎 (zhihu.com)

Spring 中的bean 是线程安全的吗? - myseries - 博客园 (cnblogs.com)

相关推荐

  1. 学习记录.springbean线安全?

    2023-12-30 23:50:02       40 阅读
  2. Spring Bean 线安全

    2023-12-30 23:50:02       34 阅读
  3. Spring Bean线安全问题

    2023-12-30 23:50:02       8 阅读
  4. 线安全模式

    2023-12-30 23:50:02       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-30 23:50:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-30 23:50:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-30 23:50:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-30 23:50:02       18 阅读

热门阅读

  1. Parameter ‘username‘ unfilled

    2023-12-30 23:50:02       32 阅读
  2. 学习记录——BiSeNet V2

    2023-12-30 23:50:02       32 阅读
  3. servlet总结

    2023-12-30 23:50:02       32 阅读
  4. 保龄球游戏的获胜者(LeetCode日记)

    2023-12-30 23:50:02       22 阅读
  5. ubuntu装机记录

    2023-12-30 23:50:02       41 阅读
  6. 说一下数据库的事务隔离?

    2023-12-30 23:50:02       38 阅读
  7. 【用pandas,写入内容到excel工作表的问题】

    2023-12-30 23:50:02       42 阅读
  8. LeetCode[141] [142] 环形链表I II

    2023-12-30 23:50:02       42 阅读
  9. 在Github逛街

    2023-12-30 23:50:02       35 阅读