参考资料:https://www.bilibili.com/video/BV1Ki4y1t7Va?t=4507
1.spring项目在开发过程中用的都是数据库连接池,这样可以避免线程的消耗,
之前说过spring的事务问题,事务保证了操作的一致性,那么线程安全是怎么保证的呢?
底层用的ThreadLocal来保证线程之间的数据隔离
当一个线程开启事务时,会从连接池取一个连接 放到与自己绑定的ThreadLocal中,这个线程在service和dao层中获取连接时直接从ThreadLocal中获取,最后执行完了会把连接放回到线程池中。
源码:查看spring事务管理的DataSourceTransactionManager类的doBegin方法。
然后
点开resources,发现是一个ThreadLocal对象
再点发现这个NameThreadLocal类继承自ThreadLocal,只是多了一个名字。
这个类在spring中哪里用了呢?可以看到,spring中大量使用了ThreadLocal
原文:https://www.cnblogs.com/keith0/p/12857179.html