[英]how to make thread wait until another thread has completed that method execution
尽管这个问题似乎很基本,但我的情况与@stackoverflow的其他帖子完全不同。 我在JPA&jersey(REST)实现中使用spring。 每当我从curl到我的Java REST方法同时命中2个请求以更新数据库资源时,第一个请求都会成功执行,而第二个请求会失败,并出现乐观锁异常:
javax.persistence.OptimisticLockException:异常[EclipseLink-5006](Eclipse Persistence Services-2.5.2.v20140319-9ad6abd):org.eclipse.persistence.exceptions.OptimisticLockException异常描述:无法更新对象,因为它已被更改或删除。自上次阅读以来。
我尝试将更新的代码放入同步块中,但没有成功。
我也尝试过声明rest方法是同步的,但是没有用。
现在,我希望我的方法由第一个请求执行,并希望第二个请求等待直到第一个请求完成它的执行。
我已经使用static
变量实现了此目的,但是由于代码标准,我不想使用static
变量。
有人可以为此提供有效的解决方案吗?
在数据库调用之前使用同步会有所帮助。
1)使用同步关键字
synchronized(this){
//process
}
2)另一种选择是在方法名称前使用同步
synchronized void <method(){
//process
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.