首页 > 其他分享 >spring中的bean是否是线程安全的

spring中的bean是否是线程安全的

时间:2023-06-26 23:25:03浏览次数:39  
标签:变量 spring 安全 bean 线程 单例 Spring

Spring中的bean是否线程安全,与Spring本身是无关的。Spring中会提供很多线程安全方面的策略,因此Spring中的bean也不具备线程安全的特性

在Spring的作用域中,有以下几种;

  • prototype(多例)
    • 每次getBean得到时候都会创建一个新的对象
  • singleton(单例)
    • 在Spring容器中只存在一个全局共享的实例

由此可见,

  • prototype多例bean,每次都会创建新的实例,因此线程之间不存在共享问题,也就不存在线程安全问题。
  • singleton单例bean,是所有的线程共享一个实例,因此可能会存在线程安全问题。

但是singleton单例bean又分为无状态bean和有状态bean。

  • 无状态单例bean:在多线程操作中,只会对bean的成员变量进行查询操作,不会修改成员变量的值。这样的单例bean我们称之为无状态单例bean,这样的bean是不存在线程安全问题的。
  • 有状态单例bean:在多线程操作中,如果需要对bean中的成员变量进行数据更新操作,我们称这样的单例bean为有状态单例bean,这样的bean是可能 存在线程安全问题的。

因此,我们可以得出结论 在Spring中,只有有状态的单例bean可能存在线程安全问题。

针对Spring使用过程中可能存在线程安全问题的bean,提供几种解决方式以供参考:

  1. 将作用域singleton单例改为prototype多例
  2. 在bean中避免定义可变的成员变量,当然了,这种方式是不太现实的,没有很大的参考意义。
  3. 在类中定义ThreadLocal的成员变量,并将需要的可变成员变量保存在ThreadLocal中,因为ThreadLocal本身就具备线程隔离的特性,这就相当于为每个线程提供了一个独立的变量副本,每个线程只需要操作自己的线程变量副本,从而解决线程安全问题。

标签:变量,spring,安全,bean,线程,单例,Spring
From: https://www.cnblogs.com/DuX1ao/p/17507425.html

相关文章

  • 线程上运行 task
    我没能实现始终在一个线程上运行task 前文我们总结了在使用常驻任务实现常驻线程时,应该注意的事项。但是我们最终没有提到如何在处理对于带有异步代码的办法。本篇将接受笔者对于该内容的总结。如何识别当前代码跑在什么线程上一切开始之前,我们先来使用一种简单的方式来识......
  • 基于JAVA的springboot班级综合测评管理系统,附源码+数据库+论文+PPT,适合课程设计、毕业
    1、项目介绍随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理,交易等,而且过程简单、快捷。同样的,在人们的工作生活中,也就需要互联网技术来方便人们的日常工作生活,实现工作办公的自动化处......
  • SpringBoot事件机制
    1、是什么?SpringBoot事件机制是指SpringBoot中的开发人员可以通过编写自定义事件来对应用程序进行事件处理。我们可以创建自己的事件类,并在应用程序中注册这些事件,当事件被触发时,可以对其进行处理。在SpringBoot中,事件可以是任意类型的,可以是基于Spring的事件,也可以是自定义的事......
  • SpringCloud01
    1.项目架构的发展过程1.1.单一应用架构(单体架构)当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。缺点:1、性能扩展比较......
  • SpringBoot04
    1.Springboot和Mybatis的整合1.1.使用注解的方式整合MyBatis引入相关的依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><!--mybatis起步依赖--><dependency>......
  • Spring Boot Shiro视频 - 身份认证准备工作
       在认证、授权内部实现机制中都有提到,最终处理都将交给Real进行处理。因为在Shiro中,最终是通过Realm来获取应用程序中的用户、角色及权限信息的。通常情况下,在Realm中会直接从我们的数据源中获取Shiro需要的验证信息。可以说,Realm是专用于安全框架的DAO。实现过程(1)认证实......
  • Spring Boot视频 - 集成Jersey【周三更新】
     第十三章 SpringBoot 单元测试1、SpringBoot集成Jersey 下节更新预告:SpringBoot集成Jersey中文乱码 历史章节:第一章快速开始1、SpringBoot之HelloWorld2、SpringBoot之HelloWorld访问404 第二章 SpringBoot之JSON1、springboot返回json数据2、SpringBoot完美......
  • Spring Boot 形参Map并没有添加到类似于ModelAndView中,但是却可以页面取到相应的值?
    需求缘起:      有网友留言:感谢讲解,思路很清晰,不过有点疑惑,为什么最后结尾的时候,那个形参Map并没有添加到类似于ModelAndView中,但是页面却可以取到相应的值? 本节大纲:(1)留言代码翻译(2)问题分析(3)SpringMVC数据模型(4)写法延伸       接下来看下具体的内容:留言代码翻译:我......
  • SpringBoot自动配置原理
    SpringBoot自动配置自动配置是SpringBoot的核心因素,SpringBoot在整合每一种第三方技术时,都离不开自动配置。但在了解自动配置之前,Spring容器如何进行对bean的加载以及加载控制也是一个非常重要的前提知识。1.bean的加载方式1.1方式一:配置文件+<bean/>标签最初级的bean的加载......
  • 【3.0】知识点小结(线程相关)
    【3.0】知识点小结(线程相关)【一】什么是线程进程资源单位线程执行单位将操作系统比喻成大的工厂进程相当于工厂里面的车间线程相当于车间里面的流水线每一个进程必定自带一个线程进程:资源单位​ 起一个进程仅仅只是在内存空间中开辟出一块独立的空间......