Java 了解@服务和比赛条件

Java 了解@服务和比赛条件,java,spring,spring-mvc,Java,Spring,Spring Mvc,我用@service注释一个类。我的@controller类将通过@autowired调用@service。任何人都可以在@service class,method中预见到的竞争条件 如果我在@service中有方法 public boolean dosomethinglongtime(){ boolean passed=false; //write to database... //do very long task; //if all task success, passed=true;

我用@service注释一个类。我的@controller类将通过@autowired调用@service。任何人都可以在@service class,method中预见到的竞争条件

如果我在@service中有方法

public boolean dosomethinglongtime(){
boolean passed=false;
//write to database...
//do very long task;
//if all task success, passed=true;

return passsed
} 
对于调用控制器并调用此方法的两个不同用户,是否有可能在dosomethinglongtime()内传递的布尔值上造成竞争条件


嗯,这只是一个疑问,到目前为止还没有比赛条件发生,我只是想澄清这个疑问。谢谢

不,从Java的角度来看,代码中不会有任何竞争条件,因为布尔值的作用域是方法调用。如果布尔值是实例或类属性,那么您可能会遇到并发问题。理想情况下,您的服务应该是无状态的,以避免竞争条件,如果不是,则需要使类同步,或者使用一些来自


如果要防止两个用户在数据库中写入/更新相同的记录,则需要使用锁定机制,例如,或。链接指向hibernate文档,但大多数ORM都支持这两种锁定机制。

不,该代码中没有任何竞争条件(从Java的角度来看),因为布尔值的作用域是方法调用。如果布尔值是实例或类属性,那么您可能会遇到并发问题。理想情况下,您的服务应该是无状态的,以避免竞争条件,如果不是,则需要使类同步,或者使用一些来自

如果要防止两个用户在数据库中写入/更新相同的记录,则需要使用锁定机制,例如,或。链接指向hibernate文档,但大多数ORM都支持这两种锁定机制