2011-03-08 82 views
1

我使用@service注释一个类。我的@controller类将通过@autowired调用@service。任何人都可以在@service类中预见任何竞争条件,方法?了解@服务和竞争条件

如果我有内部@Service

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

return passsed 
} 

方法调用控制器和调用该方法,原因竞争条件上()内dosomethinglongtime通过布尔2个不同的用户的任何可能性?

好吧,这只是一个疑问,迄今为止没有比赛情况发生,我只想澄清疑问。谢谢

回答

1

不,在该代码中不会有任何竞争条件(从Java的角度来看),因为布尔的范围是方法调用。如果布尔值是一个实例或类属性,那么你可能会遇到并发问题。理想情况下,您的服务应该是无状态的,以避免竞争条件,如果不是,您需要使课程同步或使用concurrent package中的某些深奥内容。

如果要阻止2个用户写入/更新数据库中的相同记录,则需要使用锁定机制,例如optimistic lockingpessimistic locking。链接转到hibernate文档,但大多数ORM支持两种锁定机制。