数据库连接池为什么要用ThreadLocal呢?
Java后端技术
共 2236字,需浏览 5分钟
· 2021-05-17
1、【建议收藏】面试官会问的位运算奇淫技巧 2、Top 16 的 Java 工具类,你用过几个? 3、到底可不可以用 kill -9 关闭程序? 4、IDEA 2021首个大版本发布,新增了这几个超实用功能! 5、Optional 是个好东西,你真的会用么?
来源:blog.csdn.net/qq_42405666/article/details/108258820
1、两者有根本性的区别,用处不一样!
2、重点要理解“连接池”。
题外话:如果直接通过 Java原生API 获取“直连”的话:
java.sql.DriverManager.getConnection(url, props);
java.sql.Driver.connect(url, props);
PS:所以说:使用数据库连接池时,还是要显式的调用数据库连接池API提供的关闭连接的方法。
不同的线程在同一个时间( 或者 同一个线程在多个地方)从连接池中拿到的Connection,肯定不是同一个连接。(反过来讲:不同时间的两个线程,一前一后,则有可能拿到同一个连接)
总结:
首先,我们为了避免单一数据库连接的创建和关闭耗费时间和性能,引入了数据库连接池,提前创建好了n条连接放入池中,如果是单线程情况下,那这样挺好的 那如果是多线程情况下呢?还是上面那段话,假设同一时间多个线程从数据库连接池获取连接,那肯定拿的是不同的连接,我当前线程和别的线程拿的连接不一样,那我当前在crud的时候,不在一个事务之内。 假设不同时间的多个线程要从数据库连接池拿连接,那这个时候就可能拿到的是同一个连接了,那我多个线程线程拿到的是同一个连接,也就是说在多个线程在同一个事务之内,线程a执行了插入还没来得及提交,线程b此时来了个更新,在线程a还未操作完之前,线程b更新完了后,直接把连接给close了,线程a插了一半发现插不了了。。。此时肯定在想,这™是谁在搞我。 为了确保不同时间多个线程可能拿到的是同一个连接,那么此时threadlocal闪亮登场,就算我拿的是“同一个连接”,在引入了threadlocal后,每个线程之间都会创建独立的连接副本,将collection各自copy一份,这样就互相不干扰了。
以上是我的个人见解。
往期热门文章:
1、《历史文章分类导读列表!精选优秀博文都在这里了!》
2、七种方式教你在Spring Boot初始化时搞点事情
3、ConcurrentHashMap有十个提升性能的地方,你都知道吗? 4、程序员等级图鉴 5、Java 中的 Switch 都支持 String 了,为什么不支持 long? 6、为什么数据库字段要使用NOT NULL? 7、CTO 说了,用错 @Autowired 和 @Resource 的人可以领盒饭了 8、程序员离职事件始末
9、别总写代码,这130个网站比涨工资都重要 10、程序员养生指北
评论
BigDecimal 为什么可以保证精度不丢失?
来源:juejin.cn/post/7348709938023940136👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接
小哈学Java
0
为什么我们公司还在用 Python 开发项目?
作者:哇哒嘻哇https://www.zhihu.com/question/278798145/answer/3416549119最近几年里,经常看到某些曾重度使用 Python 的大公司迁移成其它语言技术栈,但是,那些小公司/小团队的情况如何呢?一直很想了解那些仍在坚持使用 Python,且支撑业
机器学习算法与Python实战
0
知乎高问:程序员有必要知道为什么做某个功能吗?
将Python客栈设为“星标⭐”第一时间收到最新资讯前言知乎上有一个提问:程序员有必要知道为什么做某个功能吗?↓↓↓今天,我们就这个话题一起来做个讨论。不知道程序员的你,在接到产品经理提的一个需求后,是习惯马上动手开始撸代码呢?还是会先暂停一下,认真思考一会如下一些问题,比如这个需求产生的背景是什么
Python客栈
0
PyPy为什么能让Python比C还快?一文了解内在机制
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源:机器之心「如果想让代码运行得更快,您应该使用 PyPy。」—— Python 之父 Guido van Rossum对于研究人员来说,迅速把想法代码化并查看其是否行得通至关重要。Pyth
菜鸟学Python
0
“为什么裁员先从技术人员开始?”
将Python客栈设为“星标⭐”第一时间收到最新资讯作者 | 纯洁的微笑来源 | 纯洁的微笑(ID:keeppuresmile)很多公司裁员,都会先从技术入手。有一个网友做了这样一个比喻,城市里面的房子如果盖起来后,还需要农民工么?这句话引起引起了很多程序员共鸣,因为我们常常说程序员是IT
Python客栈
0
面试官:为什么忘记密码要重置,而不是告诉我原密码?
将Python客栈设为“星标⭐”第一时间收到最新资讯来源丨程序员Sunday(ID:gh_255b41b1f634)最近有个同学在面试中遇到了一个很有意思的问题,我相信大多数的同学可能都没有遇到过。面试官提问说:“为什么很多网站忘记密码需要重置,而不是直接告诉用户原密码?”很有意思的问题对不对。很多
Python客栈
0
为什么现在Java连Date类都不建议使用了?
来源:juejin.cn/post/7343161506699313162有什么问题吗java.util.Date?java.util.Date(Date从现在开始)是一个糟糕的类型,这解释了为什么它的大部分内容在 Java 1.1 中被弃用(但不幸的是仍在使用)。设计缺陷包括:它的名称具有误导性:
Java专栏
10