我有一个由 spring rest 控制器调用的单例 spring 服务。
单例服务MyService
有一些方法addRecordIfNotExistsBefore
,它有以下实现:
public void addRecordIfNotExistsBefore(String record){
boolean isExist = checkIfRecordNotExitsBefore();
if (!isExist){
addRecordToDb(record);
}
}
问题是 - 正如出现的那样 - 当两个客户端同时请求相同的服务时,记录会被两次添加到数据库中。
我可以在一些简单的实现中应用双重检查习语,例如:
public void addRecordIfNotExistsBefore(String record){
boolean isExist = checkIfRecordNotExitsBefore();
if (!isExist){
synchoronized(this){
isExist = checkIfRecordNotExitsBefore();
if (!isExist){
addRecordToDb(record);
}
}
}
}
它是有效的解决方案,还是有其他更好的解决方案?