C3P0数据库连接池死锁问题

本文深入探讨了连接池死锁的产生原理,分析了当线程同时占用多个连接对象时如何引发死锁,并提出了解决策略,包括限制线程获取连接数及设置数据库链接超时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

死锁的产生原理是:存在线程同时占有两个以上的连接对象的情况。 

比如某连接池中有2个连接对象。 
有两个线程分别占用了一个,又分别来申请另一个。这时由于连接池空,而两个线程本身都卡在连接池上,不可能释放原来占有的连接对象,这时产生死锁。 

连接池死锁,会导致软件和数据库相关的部份无响应。比如登陆功能,会用数据库做用户校验,发生连接池死锁后,登陆功能会无法使用(点登陆按钮后,长时间无相应)。

策略:

1.我的做法是一个线程只获取一个连接对象,连接对象上开启事务,然后执行一系列CRUD操作,在这些CRUD操作中不可以再申请新的连接对象,也不可以开启新事务。当这一系列操作执行成功后,提交事务并把连接对象放回池中。

2.数据库链接设置超时,超时自动释放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值