TreadLocal
1. java.lang.TreadLocal 一个保存线程本地化对象的容器 。
2. 和线程同步机制一样都是为了解决多线程中相同变量的访问冲突问题。
3. 同步机制:通过对象锁机制保证同一时机只有一个线程访问变量,以时间换空间的方式,访问串行化,对象共享化。
4. ThreadLocal:为每个线程提供一个变量副本,从而隔离了多线程对访问数据的冲突,每个线程都拥有自己的变量副本,因而没必要对变量进行同步,且提供了线程安全的封装,在编写多线程代码时可以把不安全的变量封装进TreadLocal。以空间换时间的方式,访问并行化,对象独享化。
5. Spring的事物同步管理器类org.springframework.transaction.support.TransactionSynchronizationManager使用ThreadLocal为不同事物提供变量副本,同时维护事物配置的属性和运行状态信息。
6. Spring的事物传播行为:通过事物传播行为控制当前的事物如何传播到被嵌套调用的目标服务接口方法中。
七种事物传播行为
- PROPAGATION_REQUIRED:如果当前没有事物就创建一个事物,如果已有事物就加入到这个事物中,这是最常见的选择。
- PROPAGATION_SUPPORTS:支持当前事物,如果当前没有事物就以非事物方式执行。
- PROPAGATION_MANDATORY:使用当前的事物,如果当前没有事物,就抛出异常。
- PROPAGATION_REQUIRES_NEW:新建事物,如果当前不存在事物,就把当前事物挂起。
- PROPAGATION_NOT_SUPPORTED:以非事物方式执行如果当前有事物,就将其挂起。
- PROPAGATION_NEVER:以非事务方式执行,如果当前存在事物就抛出异常。
- PROPAGATION_NESTED:如果当前存在事物,则在嵌套事物中执行,如果当前没有事物就执行与PROPAGATION)REQUIRED类似的操作。使用时,底层数据源必须基于JDBC3.0并且实现者需要支持保存点事物机制。
声明式的事务管理
- 通过Spring AOP 实现,通过事物的声明性信息,Spring负责将事物的增强逻辑织入业务方法的相应连接点中,这些事物包括获取线程绑定资源,开始事物,提交回滚事物、进行异常转换和处理。