繁体   English   中英

如何让线程等到另一个线程完成该方法的执行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM