如何解决多线程造成的数据库死锁

如何解决多线程造成的数据库死锁,第1张

多线程是很容易造成死锁,一般情况下死锁都是因为并发 *** 作引起的。我不懂JAVA,但死锁这个问题每种开发工具和数据库都会碰到解决办法是:

1、程序方面优化算法(如有序资源分配法、银行算法等),在一个程序里,能不用多线程更新同一张数据库表 尽量不要用,如果要用,其避免死锁的算法就很复杂。

2、数据库方面设置等待超时时间

3、发生死锁后直接KILL掉数据库进程

你的提问就有问题

当你的程序不管是不是多线程的

获得到一个数据库连接是 数据库会把这个连接标记为繁忙 当其他程序访问时它会返回另外空闲的连接

连接个数是有限的 如果一直不释放连接 数据库就会告诉你连接已经使用完了

这里和线程安全有何关系呢? 线程安全和数据库 *** 作没有直接关系

1。通过线程的互斥来同步 *** 作数据库 2。数据库采用事务处理表中的数据 3。采用共享方式打开数据库,不是以独占方式打开数据库 建立一个mysql连接表加上一个临界区,表结点是这样的(mysqlcon,bool),根据实际情况定大校我用的是10个连接。

加个判断

if (SqlHelperconnectionState == SystemDataConnectionStateClosed)

SqlHelperconnectionOpen();

else  (SqlHelperconnectionState == SystemDataConnectionStateBroken)

{

SqlHelperconnectionClose();

SqlHelperconnectionOpen();

}

先检查一下datareader是不是一定在用完就关了(最好用using来处理),或者在程序中就不要用datareader来读取数据,换成其它的dataset之类的,如果一定要用datareader可以用lock之类的锁定代码段,另外在高版本的sql server上也支持一个连接下多个datareader,见>

开机用一会儿,就出现此情况,已重装过系统,执行过全盘扫毒,并无异样

答:既然排除了病毒的可能性,就必然是硬件问题了。 主板老化,电容爆浆,硬盘故障,内存损坏,等等,都有可能。 楼主用的老机器吧,该换就换吧,

对于数据库来说都是支持并发访问的,但是从 ComboPooledDataSource 中获得的 Connection 连接对象不是线程安全的,一个 Connection 只能在一个线程中,或者局部变量中使用,不得在多个线程中共享一个 Connection。

以上就是关于如何解决多线程造成的数据库死锁全部的内容,包括:如何解决多线程造成的数据库死锁、JAVA多线程访问数据库如何实现线程安全、Delphi中如何多线程 *** 作数据库中的数据表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/9508944.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存