首页 > 编程语言 > 详细

ThreadLocal在Spring事务管理中的应用

时间:2017-02-14 13:37:24      阅读:130      评论:0      收藏:0      [点我收藏+]

  ThreadLocal是用来处理多线程并发问题的一种解决方案。ThreadLocal是的作用是提供线程的局部变量,在多线程并发环境下,提供了与其他线程隔离的局部变量。通常这样的设计的情况是因为这个局部变量是不适合放在全局变量进行同步处理的。比如在事务管理中,在service类中的涉及到事务的方法,每个事务的上下文都应该是独立拥有数据库的connection连接的,否则在数据提交回滚过程中就会产生冲突。

  spring中使用ThreadLocal来设计TransactionSynchronizationManager类,实现了事务管理与数据访问服务的解耦,同时也保证了多线程环境下connection的线程安全问题。

DataSourceTransactionManager的实现中,doBegin()方法开启事务,我们看下它是怎么处理connection资源的。

技术分享

首先从数据库连接池中获得一个connection,并构造一个connection包装类,使用这个包装类开启事务,最后通过TransactionSynchronizationManager将connection与ThreadLocal绑定,事务提交或者回滚后,解除绑定。

TransactionSynchronizationManager中bindResource()的实现

技术分享

Resource就是ThreadLocal,而这里的Map就是ThreadLocalMap的value,与当前线程关联的ThreadLocal的值。

ThreadLocal在Spring事务管理中的应用

原文:http://www.cnblogs.com/fishisnow/p/6396989.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!