spring的bean是线程安全的吗,以及一些简单的ThreadLocal知识
一。首先spring中的bean是线程不安全的
spring的作用域大致可以分为两种,一种是单例模式,一种是原型模式
在单例模式中bean只会被ioc容器初始化一次(当然讲到单例模式自然既有饱和饿汉的方法),但不管咋样就是线程不安全的,因为ioc容器只初始化一次
将数据就加载到JVM内存当中,但是我们知道在多线程的情况下,用户是会公用一个bean的应为是单例模式的,这样就会产生线程不安全的问题,线程不安全
的最基本含义就是信息不共享,也即是说的数据不同步,这里就是我们的锁就可以出来了,他就是来保证线程安全的,在线程获取并操作数据的时候就会将
属等栈中存储的数据会加载到在即本地线程栈当中也就是ThreadLocal,
其中要明白ThreadLocal里面维护的是什么-----一个map 这就是线程安全了呀,
AtomicInteger 这个关键字就安全的。
/** * The next hash code to be given out. Updated atomically. Starts at * zero. */ private static AtomicInteger nextHashCode = new AtomicInteger(); /** * The difference between successively generated hash codes - turns * implicit sequential thread-local IDs into near-optimally spread * multiplicative hash values for power-of-two-sized tables. */ private static final int HASH_INCREMENT = 0x61c88647; /** * Returns the next hash code. */ private static int nextHashCode() { //自增 return nextHashCode.getAndAdd(HASH_INCREMENT); }
AtomicInteger 笔记记到这里就设计到锁相关的知识了:
锁其实是一件特别好理解的事情,就是一个人操作数据,期间不允许其他人对数据进行操作,这里的人就是指线程,人操作的东西就是数据,而对应数据的操作不过就是读和写,所以这里就产生了
读读,读写,写写。写读之间的间隔也就是枷锁,其实线程间的锁可以类比的数据库当中也就是mysql中的读写锁啥的,一个道理。其实锁的本质就是一个阻拦的作用。
下来说spring是如何解决循环依赖的问题
太麻烦了。。。。。。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端