csdn_li_shuai 2022-01-12 17:03 采纳率: 50%
浏览 587

spring加上@service注解是单例吗?

问题遇到的现象和发生背景

spring框架在service层加上@service注解是单例模式, 两个线程同时调用单例模式service, 线程1的service的test方法返回1; 线程2的service的test方法返回2; 返回到controller的时候会不会拿到的都是2 ; 不会搞混吗?

  • 写回答

4条回答 默认 最新

  • 小飞LOVE霞 2022-01-12 19:20
    关注

    为了说明问题,画个简单的JVM运行时数据区。

    img

    Spring框架在service层加上@Service注解是单例模式:注意:Spring默认是单例模式。
    说明:下面的描述是在非线程安全的前提下做出的解释。
    1、看上面的图,用注解@Service修饰的类,比如Test类,是单例的,也就是说,Controller层调用Test类,调用的是同一个对象。
    2、重点来了,注意:方法test() 是在虚拟机栈里面运行的,当线程1调用方法test的时候,会在虚拟机栈里面开辟一个空间,线程2同理。
    3、两个线程调用不同的空间,当然返回值也不同。
    稍微扩展一下:在有线程安全的环境下:
    假如线程1和线程2要操作相同的资源,或者凡是有线程安全问题存在,你提的问题就会发生。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月12日

悬赏问题

  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划