Spring中Bean的线程安全问题

Spring框架本身没有明确指出Bean的线程安全问题,所以Bean本身也不具备线程安全的特性,具体情况得看scope的情况。

1.原型的(prototype)

每次创建一个新的对象,每个线程使用的对象都是要新创建的,所以不会存在线程安全的问题。

2.单例的(singleton)

对于单列的,由于多个线程共用一个对象,所以会存在同一资源竞争的问题。单例的Bean又分为有状态无状态的。

  • 有状态指的是此对象中有公共的变量,方法中会涉及到修改变量的问题,最简单的做法就是将singleton改为prototype,还可以使用ThreadLocal来解决。
  • 无状态的指的是我们只是用此变量来调用其他的方法或属性,不存在修改该变量,这样的话因为对于Java虚拟机栈每个线程都是私有的,所以也就不存在线程安全问题了。
相关推荐
元界metalite3 分钟前
Spring-AOP切面越写越多怎么办-8类场景的一条有序处理器链
后端
有米9794 分钟前
Logstash的安装和Elasticsearch的整合
后端
newerp4 分钟前
reflect.Value 与动态值操作
后端
jinzhe7 分钟前
终端bash&zsh中实现基于前缀的历史命令搜索
后端
用户81818706274615 分钟前
二、多线程并发篇
后端·程序员
Zane199416 分钟前
ThreadLocal 与 BlockingQueue:线程本地变量的内存泄漏原理,以及阻塞队列怎么选?
java·后端
用户31268748772016 分钟前
Spring Bean 生命周期到底经历了什么?从实例化到销毁的全链路拆解
java·spring boot
橘色的喵17 分钟前
一块 RISC-V MCU 是怎么启动的: 内存保护、中断与从 Flash 直接执行
后端
长栎21 分钟前
JDBC 用了 30 年的 Bridge 模式,多数人以为它只是策略模式换了层皮
后端
Flittly21 分钟前
【我的手搓轮子日记】(2)handmade-ioc 手搓 IOC 容器
java·spring boot·spring