Spring详解|Bean对象|有状态Bean 线程安全? 生命周期

1.Spring的并发问题——有状态Bean和无状态Bean有状态Bean1.Spring的并发问题——有状态Bean和无状态Bean

一、有状态和无状态

有状态会话bean   :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。

简单来说,有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象 ,可以保存数据,是非线程安全的。
无状态会话bean   :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean   的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。

由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean   并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。

简单来说,无状态就是一次操作,不能保存数据无状态对象(Stateless Bean),就是没有实例变量的对象 .不能保存数据,是不变类,是线程安全的

2.Bean是线程安全的吗?

prototype: 线程安全

singleton: 无状态下:线程安全;  有状态下:线程不安全

3.解决Bean线程不安全问题?

ThreadLocal对象---具体看并发多线程内容

ThreadLocal 是一个类,和线程有关,但并不是一个Thread

这个类能够提供线程局部变量

threadLocals的实际类型是ThreadLocal.ThreadLocalMap

当然,他和普通的变量有所不同。它本身是唯一的对象,你可以把它new出来,但每个线程去访问或者设置它的时候,读取和设置的并不是这个对象,而是本线程内这个对象的副本

这也意味着,这个对象在不同的线程中,副本的值是不一样的

4.bean对象的生命周期

如何记忆Spring Bean的生命周期 - 草捏子 (chaycao.github.io)

 一篇文章全知全能SpringBoot Bean的生命周期 - 知乎 (zhihu.com)

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值