C3P0数据库连接池死锁问题

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

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

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

策略:

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

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

来源:种向日葵的小仙女

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年6月27日
下一篇 2018年6月27日

相关推荐