2011-03-08 84 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支持兩種鎖定機制。