[英]How to avoid one to one relation concurrent access (maybe java sync, hibernate or jms issue)
在我的同時具有active-mq的spring-hibernate應用程序中,多個使用者同時訪問一種方法,該方法為我們提供了將對象記錄到mysql db的持久性。 由於該方法的並發訪問,我在其中編寫的邏輯在某些情況下會失敗。 我分享以下邏輯:
// check the current sourceId whether is included or not in log table
List<MyLogObject> logs = logService.findBySourceId(currentSourceId);
if(logs.size() == 0){
logService.persist(currentLogObject);
}
如您所見,如果多個使用者同時訪問此代碼塊,則日志的大小應為他們返回0,因此他們將同一對象持久兩次或更多次。
在active-mq和多個使用者使用的情況下,如何避免對象的多個持久性。
是否有可能通過使用Java的同步功能來實現?
提前致謝。
是的,我認為如果包含此日志記錄方法的對象在許多線程之間共享,則在此處擁有一個鎖並對該鎖使用同步應該確實有效。
它應該很簡單:
class YourClass{
.....
Object monitor = new Object();
public void log(){
synchronized(monitor){
.....
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.