
多线程是很容易造成死锁,一般情况下死锁都是因为并发 *** 作引起的。我不懂JAVA,但死锁这个问题每种开发工具和数据库都会碰到解决办法是:
1、程序方面优化算法(如有序资源分配法、银行算法等),在一个程序里,能不用多线程更新同一张数据库表 尽量不要用,如果要用,其避免死锁的算法就很复杂。
2、数据库方面设置等待超时时间
3、发生死锁后直接KILL掉数据库进程
首先对数据库(尤其是 Access)使用多线程大多不会提高效率(除非 SQL 中有耗时但不好资源的 *** 作,如 T-SQL 中休眠之类的语句)。
建议楼主:使用队列,将要执行的 SQL 语句放入队列中(如:SystemCollectionQueue 或 ArrayList),然后用一根线程一条一条执行,另外 Access 不支持事物回滚只有自己想办法实现了。滥用多线程会加大程序开发的难度,以及包括程序的不稳定。
另外: cbyvft 的答案“…… 所有的线程使用同一个连接”
,是严重错误的!!连接对象 Connection 不能迸发,也就是不能多根线程共享一个连接对象,否则很容易引发异常(报错为:基础对象与 RAW 分离之类的信息)。
若非要用多线程来做,我可以给你一段代码(我以前开发的项目中一部分),请加我的“百度Hi”并发消息给我,我传给你。
我不在这里帖代码了,因为实现的代码较多,而且比较复杂(使用多线程要考虑很多问题,代码要硕壮通用,所以代码量较大)。
以上就是关于如何解决多线程造成的数据库死锁全部的内容,包括:如何解决多线程造成的数据库死锁、C#多线程写数据库、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)