当前位置: 首页 > article >正文

springbean 并发安全

Spring的bean默认都是单例的,某些情况下,单例是并发不安全的,以Controller举例,问题根源在于,我们可能会在Controller中定义成员变量,如此一来,多个请求来临,进入的都是同一个单例的Controller对象,并对此成员变量的值进行修改操作,因此会互相影响,无法达到并发安全(不同于线程隔离的概念,后面会解释到)的效果。
一、抛出问题
首先来举个例子,证明单例的并发不安全性:
@Controller
public class HomeController {
private int i;
@GetMapping(“testsingleton1”)
@ResponseBody
public int test1() {
return ++i;
}
}
多次访问此url,可以看到每次的结果都是自增的,所以这样的代码显然是并发不安全的。
二、解决方案
因此,我们为了让无状态的海量Http请求之间不受影响,我们可以采取以下几种措施:
2.1 单例变原型
对web项目,可以Controller类上加注解@Scope(“prototype”)或@Scope(“request”),对非web项目,在Component类上添加注解@Scope(“prototype”)。
优点:实现简单;
缺点:很大程度上增大了bean创建实例化销毁的服务器资源开销。
2.2 线程隔离类ThreadLocal
有人想到了线程隔离类ThreadLocal,我们尝试


http://www.kler.cn/news/16691.html

相关文章:

  • Vue3中如何实现数字翻牌效果?
  • Redis-哈希
  • 互联网摸鱼日报(2023-04-29)
  • Docker基本管理
  • 少儿编程scratch
  • 7-1 设计一个学生类和它的一个子类——本科生类(interface接口)
  • PyTorch机器学习与深度学习技术方法
  • 微信小程序定义模板
  • 基于松鼠算法的极限学习机(ELM)回归预测-附代码
  • MySQL调优笔记——慢SQL优化记录(1)
  • 【热门框架】Maven分模块开发是什么意思?怎样操作?
  • 【Python百日进阶-Web开发-Feffery】Day613- 趣味Dash_13:PDF转换中心的项目优化
  • 马云任东京大学特聘客座教授,研究方向为可持续农业和粮食生产
  • 【Java笔试强训 22】
  • 后端要一次性返回我10万条数据
  • Linux内核面试知识总结
  • 网络计算模式复习(二)
  • 机器学习:基于朴素贝叶斯(Naive Bayes)的分类预测
  • 认识JSP
  • Vue3 : 实现Vue的跨端渲染
  • 爬虫(requsets)笔记
  • Contest3047 - 计科2101~2104算法设计与分析上机作业04
  • JavaScript 笔记
  • 如何安装Auto-GPT
  • Java+springboot开发的医院HIS信息管理系统实现,系统部署于云端,支持多租户SaaS模式
  • RK3588 lt16911uxc hdmi in
  • 【郭东白架构课 模块二:创造价值】22|节点三:什么样的风险才算是重大风险?
  • 《花雕学AI》解锁ChatGPT潜力!183个最佳提示语,助您充分利用人工智能技术
  • 数据埋点1
  • 设计模式:创建型设计模式、结构型设计模式