【发布时间】:2017-08-12 14:16:59
【问题描述】:
在 Java 7 中是否可以将方法作为参数传递。
该方法将被调用并封装在一个 do while 中以检查 sql 死锁并重试。
我正在尝试一种通用的方法来处理表上存在锁时的死锁,因为目前有数千个插入和更新来复制这种情况。目前它只会查找 SQLException 但可以将其更改为 SQLException 的 getErrorCode 和目标 ER_LOCK_DEADLOCK。
下面的代码只是我想要实现的一个示例:
public void Object1Insert(Object1 object1){
genericSQLRetry(insertObject1(object1));
}
public void Object2Insert(Object2 object2){
genericSQLRetry(insertObject2(object2));
}
public void genericSQLRetry({method}){
int retries = 5;
boolean isException = false;
do{
try {
isException = false;
retries--;
//Invoke method
{method}
}catch (SQLException e){
isException = true;
}
if (isException & retries > 0){
//getRandomSleep would be between 750-1250ms. This is to stop multiple retries at the same time.
Thread.sleep(getRandomSleep());
}
}while (isException == true && retries > 0);
}
【问题讨论】:
标签: java methods java-7 generic-programming database-deadlocks