簡體   English   中英

如何避免一對一關系並發訪問(可能是Java同步,休眠或JMS問題)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM