【spring】事务管理之threadlocal

本文介绍了ThreadLocal在Spring框架中的作用及其如何解决非线程安全对象的多线程访问问题。通过为每个线程创建独立的变量副本,ThreadLocal确保了线程之间的隔离性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在讲编程式事务之前,我们先来说一下threadlocal。

由于spring为各种支持的持久化技术都提供了简单化操作的模板和回调,这些模板类都是线程安全的。也就是说,多个DAO可以复用同一个模板实例而不会发生冲突。使用模板类访问底层数据的时候,根据底层中的持久化技术不同,模板类需要绑定不同的数据连接或者会话的资源。这些资源都是非线程安全的,也就是说他们不能再同一个时刻被多个线程共享。

针对这个问题,假如一个对象是非线程安全的,在多线程的环境下,对对象的访问必须采用synchronized进行线程同步。但是线程同步会降低线程的性能,而且模板类并未采用线程同步机制。所以,spring针对这点,采用的是springlocal。

ThreadLocal管理request的作用域bean、事务管理、任务调度、AOP等模块中都有他的影子。


ThreadLocal是一个保存线程到本地化对象的容器,当运行多线程环境的一个对象的时候使用threadLocal维护变量,ThreadLocal为每一个使用该变量的线程分配一个独立的变量副本,所以每一个线程都可以独立的改变自己的副本,而不会影响其他线程所对应的副本。所以每一个线程都可以独立的改变自己的副本,而不会影响其他线程所对应的副本。从线程的角度来看,这个变量就像线程专有的本地变量。


Thread是以时间换空间的方式,而ThreadLocal是以空间换时间的方式,




评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值