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

java在启动多线程操作数据库时出现异常“”程序执行步骤:1、创建三个List结合。2、for循环开始三条线程。3、将三个集合交给三条线程处理。4、每条线程循环List集... java在启动多线程操作数据库时出现异常“”
程序执行步骤:
1、创建三个List结合。
2、for循环开始三条线程。
3、将三个集合交给三条线程处理。
4、每条线程循环List集合对两张表处理:
描述:数据库为oracle,一张主表,一张从表,主外建关联。
线程执行规则,先查主表是否存此条数据,如果存在先删除两张表的此条数据,在插入与此条数据主键一样的一条数据。
执行结果:java.sql.SQLException: ORA-00060: 等待资源时检测到死锁
只有部分数据入库了,只能通过sql语句杀掉锁。
请问高人怎样设计程序能避免这种情况?
展开
 我来答
jenkit
2009-08-29 · TA获得超过1006个赞
知道小有建树答主
回答量:548
采纳率:0%
帮助的人:539万
展开全部
多线程是很容易造成死锁,一般情况下死锁都是因为并发操作引起的。我不懂JAVA,但死锁这个问题每种开发工具和数据库都会碰到.解决办法是:
1、程序方面优化算法(如有序资源分配法、银行算法等),在一个程序里,能不用多线程更新同一张数据库表 尽量不要用,如果要用,其避免死锁的算法就很复杂。
2、数据库方面设置等待超时时间
3、发生死锁后直接KILL掉数据库进程

参考资料: http://baike.baidu.com/view/121723.html?wtp=tt

匿名用户
2009-08-25
展开全部
这个感觉不能用多线程吧,查询可以使用,用到删除不行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式