虽然这个问题看起来很基本,但我的情景与其他帖子@stackoverflow有很大的不同。我正在使用JPA& amp;泽西(REST)实施。每当我从curl到Java REST方法同时发出2个请求以更新数据库资源时,第一个请求会成功执行,但第二个请求因乐观锁异常而失败:
javax.persistence.OptimisticLockException:异常 [EclipseLink-5006](Eclipse持久性服务 - 2.5.2.v20140319-9ad6abd):org.eclipse.persistence.exceptions.OptimisticLockException异常 描述:对象无法更新,因为它已更改或 自上次阅读以来已被删除。
我已经尝试将更新的代码放在synchronized块中,但它没有用。
我也尝试声明rest方法已同步但无法正常工作。
现在我希望我的方法由第一个请求执行,并希望第二个请求等到第一个请求完成执行。
我使用static
变量实现了这一点,但由于代码标准,我们不想使用static
变量。
有人可以为此提供有效的解决方案吗?
答案 0 :(得分:1)
在DB调用之前使用同步会有所帮助。
1)使用Synchronized关键字
synchronized(this){
//process
}
2)其他选项是在方法名称之前使用synchronized
synchronized void <method(){
//process
}