ThreadLocal浅解
- ThreadLocal的基本理解
Threadlocal很多地方都叫线程本地变量,也有很多地方叫线程本地存储,个人理解在业务上方法调用方法时都是在单线程中进行操作,在进行访问数据库时牵扯到事务操作时,因为要求要做到事务的start transaction()和commit()操作都需要同一个connection来执行,而恰巧我们的connection是从线程池中调用的。因此,我们不能保证我们进行事务开启和提交时都是用的相同的connection对象,在MVC三层架构中,一个层的方法调用另一个层的方法,难免会产生错误,比如数据库的脏读、不一致读等等,因此这里有两个解决办法。
①将connection对象作为参数传递给方法,这样就可以保证每次调用的connection对象都是一致的,但是个人觉得,这样就违背了面向对象的封装理念,同时代码也显得很臃肿,下面给出另一种解决办法,也就是用到了我们的ThreadLocal。
②private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
ThreadLoacl是一个类似Map的数据结构,key是当前的线程名称,value是当前的connection对象。由于ThreadLocal本身实现了自动封装,因为当前线程名称是固定的,所以对应的一个key仅有一个connection对象与之对应。
我们创建一个connection集合,因为我们在一次方法之间的调用时,是单线程工作,我们将数据库事务的开启、提交、终止等操作都封装到工具类中,由工具类负责事务的开启等。每次进行事务操作时,都从本地的ThreadLocal中寻找connection对象,这样一

本文介绍了ThreadLocal的基本概念,强调在处理数据库事务时确保使用同一连接的重要性。传统方式通过参数传递可能破坏封装性,而ThreadLocal提供了解决方案。ThreadLocal作为一个线程局部变量存储,能确保每个线程拥有独立的connection对象,便于在事务操作中保持一致性,避免数据不一致或脏读问题。文中提到了将事务管理封装到工具类中,利用ThreadLocal存储和获取connection,简化代码并遵循面向对象原则。
最低0.47元/天 解锁文章
237





