Spring如何保证线程安全
Spring 的常见业务组件采取单例如何保证线程安全
Spring 作为 IOC 框架,一般来说,Spring 管理的 controller、service、dao 都是单例存在,节省内存和 cpu、提高单机资源利用率(默认单例,配置多例模式使用 scope=prototype),既然是单例,那么如何控制单例被多个线程同时访问线程安全呢?
首先要理解每个 http 请求到后台都是一个单独的线程,线程之间共享同一个进程的内存、io、cpu 等资源,但线程栈是线程独有,线程之间不共享栈资源
其次,bean 分为有状态 bean 和无状态 bean,有状态 bean 即类定义了成员变量,可能被多个线程同时访问,则会出现线程安全问题;无状态 bean 每个线程访问不会产生线程安全问题,因为各个线程栈及方法栈资源都是独立的,不共享。即是,无状态 bean 可以在多线程环境下共享,有状态 bean 不能
Spring 的 dao、service 层使用的有状态 bean 如何保证线程安全
Spring 应用中 dao、service 一般以单例形式存在,dao、service 中使用的数据库 connection 以及 RequestContextHolder、TransactionSynchronizationManager、LocaleContextHolder 等都是有状态 bean,而 dao、service 又是单例,如何保证线程安全呢?
答案是使用 threadLocal 进行处理,ThreadLocal 是线程本地变量,每个线程拥有变量的一个独立副本,所以各个线程之间互不影响,保证了线程安全
SpringMVC 的 controller 并发访问
SpringMVC 中的 controller 默认是单例的,那么如果不小心在类中定义了类变量,那么这个类变量是被所有请求共享的,这可能会造成多个请求修改该变量的值,出现与预期结果不符合的异常。所以如上所述,属性变量会到值线程安全问题,解决方法包括使用 threadLocal 或不使用属性变量、配置为多例均可(加锁控制效率不行)
Spring如何保证线程安全相关推荐
- MyBatis(六)SqlSessionTemplate是如何保证线程安全的
前面说到DefaultSqlSession不是线程安全的,所以在MyBatis和spring项目整合的时候不能直接使用DefaultSqlSession,而是自己封装了一个线程安全的SqlSessio ...
- 面试官:AtomicInteger是如何保证线程安全?
blog.csdn.net/nanhuaibeian/article/details/120936139 一.为什么引入 AtomicInteger ? 谈到线程安全,会首先想到了synchroniz ...
- 原创 | 灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?
△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 222 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) JVM内存结构,是很 ...
- 聊聊保证线程安全的10个小技巧
`` 前言 对于从事后端开发的同学来说,线程安全问题是我们每天都需要考虑的问题. 线程安全问题通俗的讲:主要是在多线程的环境下,不同线程同时读和写公共资源(临界资源),导致的数据异常问题. 比如:变量 ...
- 到底如何保证线程安全,总结得太好了。。
一.线程安全等级 之前的博客中已有所提及"线程安全"问题,一般我们常说某某类是线程安全的,某某是非线程安全的.其实线程安全并不是一个"非黑即白"单项选择题. 按 ...
- 后端开发—10个小技巧教你保证线程安全
前言 对于从事后端开发的同学来说,线程安全问题是我们每天都需要考虑的问题. 线程安全问题通俗的讲:主要是在多线程的环境下,不同线程同时读和写公共资源(临界资源),导致的数据异常问题. 比如:变量a=0 ...
- 你一定要知道的保证线程安全的10个小技巧
导语 对于从事后端开发的同学来说,线程安全问题是我们每天都需要考虑的问题. 线程安全问题通俗的讲:主要是在多线程的环境下,不同线程同时读和写公共资源(临界资源),导致的数据异常问题. 比如:变量a=0 ...
- SQLite第三方框架FMDB的使用,以及使用FMDatabaseQueue保证线程安全
2019独角兽企业重金招聘Python工程师标准>>> (1)下载地址:https://github.com/ccgus/fmdb (2)注意点 --语句可以带分号":&q ...
- 它又来了!C**HashMap是如何保证线程安全的?会用不就完了?
欢迎关注方志朋的博客,回复"666"获面试宝典 阅读此篇文章,你需要有以下知识基础 Java内存模型,可见性问题 CAS HashMap底层原理 我们知道,在日常开发中使用的Has ...
- Java并发,volatile+不可变容器对象能保证线程安全么?!
<Java并发编程实战>第3章原文 <Java并发编程实战>中3.4.2 示例:使用Volatile类型来发布不可变对象 在前面的UnsafeCachingFactorizer ...
最新文章
- kotlin + springboot 整合redis,Redis工具类编写及单元测试
- mysql5.5乱码问题_如何解决MySQL5.5的中文乱码问题
- 合肥市电力大数据应用工程技术研究中心成立
- 智能手环功能模块设计_基于STM32实现智能手环设计
- Linux学习日记:第二天
- nginx-1.13.x源码安装
- Install OpenCL on Debian, Ubuntu and Mint orderly
- linux mysql提示1045_linux mysql ERROR 1045
- mysql的存储引擎_Mysql数据库3种存储引擎有什么区别?
- 华为云优秀伙伴展示--2020-08-12
- MongDB之shard_主从,副本集,分片的理解
- Unity延迟和重复调用方法
- bundler for jekyll
- form表单的get和post传值问题
- html网页中获取vf数据到mysql_怎样从HTML网页中获取SQL数据库里的数据
- matlab仿真的五个步骤,matlab simulink 仿真步骤
- etc fstab 详解linux,Linux下/etc/fstab文件详解
- Matlab一张图上绘制两条曲线-2021-11-05
- sessionid java_java如何获取sessionid
- 地球物理勘探技术类毕业论文文献有哪些?