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

时间:2017-04-18 16:32:29

标签: java spring jpa concurrency

虽然这个问题看起来很基本,但我的情景与其他帖子@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变量。

有人可以为此提供有效的解决方案吗?

1 个答案:

答案 0 :(得分:1)

在DB调用之前使用同步会有所帮助。

1)使用Synchronized关键字

synchronized(this){
//process
}

2)其他选项是在方法名称之前使用synchronized

synchronized void <method(){
//process
}