如何解决多线程造成的数据库死锁
java在启动多线程操作数据库时出现异常“”程序执行步骤:1、创建三个List结合。2、for循环开始三条线程。3、将三个集合交给三条线程处理。4、每条线程循环List集...
java在启动多线程操作数据库时出现异常“”
程序执行步骤:
1、创建三个List结合。
2、for循环开始三条线程。
3、将三个集合交给三条线程处理。
4、每条线程循环List集合对两张表处理:
描述:数据库为oracle,一张主表,一张从表,主外建关联。
线程执行规则,先查主表是否存此条数据,如果存在先删除两张表的此条数据,在插入与此条数据主键一样的一条数据。
执行结果:java.sql.SQLException: ORA-00060: 等待资源时检测到死锁
只有部分数据入库了,只能通过sql语句杀掉锁。
请问高人怎样设计程序能避免这种情况? 展开
程序执行步骤:
1、创建三个List结合。
2、for循环开始三条线程。
3、将三个集合交给三条线程处理。
4、每条线程循环List集合对两张表处理:
描述:数据库为oracle,一张主表,一张从表,主外建关联。
线程执行规则,先查主表是否存此条数据,如果存在先删除两张表的此条数据,在插入与此条数据主键一样的一条数据。
执行结果:java.sql.SQLException: ORA-00060: 等待资源时检测到死锁
只有部分数据入库了,只能通过sql语句杀掉锁。
请问高人怎样设计程序能避免这种情况? 展开
2个回答
展开全部
多线程是很容易造成死锁,一般情况下死锁都是因为并发操作引起的。我不懂JAVA,但死锁这个问题每种开发工具和数据库都会碰到.解决办法是:
1、程序方面优化算法(如有序资源分配法、银行算法等),在一个程序里,能不用多线程更新同一张数据库表 尽量不要用,如果要用,其避免死锁的算法就很复杂。
2、数据库方面设置等待超时时间
3、发生死锁后直接KILL掉数据库进程
1、程序方面优化算法(如有序资源分配法、银行算法等),在一个程序里,能不用多线程更新同一张数据库表 尽量不要用,如果要用,其避免死锁的算法就很复杂。
2、数据库方面设置等待超时时间
3、发生死锁后直接KILL掉数据库进程
参考资料: http://baike.baidu.com/view/121723.html?wtp=tt
2009-08-25
展开全部
这个感觉不能用多线程吧,查询可以使用,用到删除不行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询