java多线程数据库锁表_java – 多线程 – 避免和处理数据库死锁

我正在寻找一个从

Java 6应用程序中处理数据库死锁的好策略;可能会有几个并行线程同时写入同一个表.如果数据库(Ingres RDMBS)检测到死锁,它将随机杀死其中一个会话.

考虑到以下要求,处理死锁情况的可接受技术是什么?

>应保留总耗用时间

尽可能小的

>杀一个会议将招致一个

重大(可衡量的)回滚

>时间线程没有办法

彼此沟通,即

战略应该是自主的

到目前为止,我提出的策略是这样的:

short attempts = 0;

boolean success = false;

long delayMs = 0;

Random random = new Random();

do {

try {

//insert loads of records in table 'x'

success = true;

} catch (ConcurrencyFailureException e) {

attempts++;

success = false;

delayMs = 1000*attempts+random.nextInt(1000*attempts);

try {

Thread.sleep(delayMs);

} catch (InterruptedException ie) {

}

}

} while (!success);

它可以以任何方式改进吗?例如等待固定数量(幻数)秒.

是否有不同的策略可以产生更好的结果?

注意:将使用几种数据库级技术来确保死锁在实践中非常罕见.此外,应用程序将尝试避免调度同时写入同一个表的线程.上述情况只是“最糟糕的情况”.

注意:插入记录的表被组织为堆分区表并且没有索引;每个线程都会在其自己的分区中插入记录.

你可能感兴趣的:(java多线程数据库锁表)