数据库基础(二)

本文探讨了ThreadLocal作为线程本地化对象容器的作用及其在解决多线程访问冲突问题上的应用。对比了同步机制与ThreadLocal的不同,并详细介绍了Spring框架中如何利用ThreadLocal进行事务同步管理及七种不同的事务传播行为。

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

TreadLocal
 1. java.lang.TreadLocal 一个保存线程本地化对象的容器 。
 2. 和线程同步机制一样都是为了解决多线程中相同变量的访问冲突问题。
 3. 同步机制:通过对象锁机制保证同一时机只有一个线程访问变量,以时间换空间的方式,访问串行化,对象共享化。
 4. ThreadLocal:为每个线程提供一个变量副本,从而隔离了多线程对访问数据的冲突,每个线程都拥有自己的变量副本,因而没必要对变量进行同步,且提供了线程安全的封装,在编写多线程代码时可以把不安全的变量封装进TreadLocal。以空间换时间的方式,访问并行化,对象独享化。
 5. Spring的事物同步管理器类org.springframework.transaction.support.TransactionSynchronizationManager使用ThreadLocal为不同事物提供变量副本,同时维护事物配置的属性和运行状态信息。     
 6. Spring的事物传播行为:通过事物传播行为控制当前的事物如何传播到被嵌套调用的目标服务接口方法中。
七种事物传播行为

  1. PROPAGATION_REQUIRED:如果当前没有事物就创建一个事物,如果已有事物就加入到这个事物中,这是最常见的选择。
  2. PROPAGATION_SUPPORTS:支持当前事物,如果当前没有事物就以非事物方式执行。
  3. PROPAGATION_MANDATORY:使用当前的事物,如果当前没有事物,就抛出异常。
  4. PROPAGATION_REQUIRES_NEW:新建事物,如果当前不存在事物,就把当前事物挂起。
  5. PROPAGATION_NOT_SUPPORTED:以非事物方式执行如果当前有事物,就将其挂起。
  6. PROPAGATION_NEVER:以非事务方式执行,如果当前存在事物就抛出异常。
  7. PROPAGATION_NESTED:如果当前存在事物,则在嵌套事物中执行,如果当前没有事物就执行与PROPAGATION)REQUIRED类似的操作。使用时,底层数据源必须基于JDBC3.0并且实现者需要支持保存点事物机制。
声明式的事务管理
  1. 通过Spring AOP 实现,通过事物的声明性信息,Spring负责将事物的增强逻辑织入业务方法的相应连接点中,这些事物包括获取线程绑定资源,开始事物,提交回滚事物、进行异常转换和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值