数据库连接,线程,ThreadLocal三者之间的关系

从数据库连接与线程的关系说起

我们知道,数据库连接是很宝贵的资源,以MySQL为例,一台MySQL服务器最大连接数默认是100, 最大可以达到16384。但现实中最多是到200,再多MySQL服务器就承受不住了。因为mysql连接用的是tcp协议,稳定的同时意味着需要消耗更多时间和性能去建立维持连接。为了能最大利用如此宝贵的数据库连接,我们希望数据库连接能被复用而不需要频繁创建,所以利用池化技术建立数据库连接池。
那么数据库连接与线程是什么关系呢?
了解连接池在多线程场景中是如何工作的。 一个连接池包含多个连接对象。我们可以配置池的大小。 当多个线程需要并发访问一个数据库时,它们会从连接池中请求连接对象。 如果池中仍有空闲连接,线程将获取连接对象并开始其数据库操作。线程完成工作后,会将连接返回到池中。 如果池中没有空闲连接,线程将等待另一个线程将连接对象返回到池中。 所以,一个连接在同一时间只能被一个线程所持有,一个线程在同一时间也只能申请到一个连接,官方也不鼓励在多个线程之间共享连接对象

明白了这点之后再看下线程,我们知道一个线程在生命周期内会做很多事情,比如参数校验权限验证数值计算,然后持久化结果。其中可能只有持久化结果环节需要访问JDBC数据库连接,其余的时间范围内,JDBC数据库连接 都是空闲状态。所以如果线程整个生命周期中独占JDBC数据库连接的话,那么这个连接空闲率就很高也就变得很浪费,因为一旦占用了数据库连接可以不限次数执行事务SQL请求,增删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值