首页 > 编程语言 > 详细

spring的ThreadLocal解决线程安全

时间:2020-05-09 15:09:08      阅读:68      评论:0      收藏:0      [点我收藏+]

参考资料: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

技术分享图片

 

spring的ThreadLocal解决线程安全

原文:https://www.cnblogs.com/keith0/p/12857179.html

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