2011-02-03 40 views
0

我被給了一個代碼,它根據用戶名和服務類型創建一個唯一的id。 獨特的ID是在DB中,數據庫通過DAO類讀取,我不能看到。它需要很多步驟來創建id。使用db值進行Java同步

create(user,service) { 
    id=getIdViaDAO(user,service) 
    if(id==null) { 
     create few classes and call few methods. 
     id=generareId(few objects) 
     session.setId(id) 
     dao.createSession(session) 
    } 
    return id 
} 

在多線程環境中,不能保證唯一的id。

爲了保證唯一性

解決方案:我會緩存ID與用戶id +服務爲重點和ID值的ConcurrentHashMap。每當方法被調用時,我將檢查值(id)是否存在鎖的密鑰並創建id。這將減少爭用並保證唯一性。

想知道我的解決方案是否存在問題和/或是否有更好的解決方案?

+0

id是一個局部變量 – 2011-02-03 17:17:24

回答

0

相同的用戶和服務應該給你相同的ID,所以你很好。幾件事情需要注意的:

  • 確保用戶ID和服務實現hashCode()和equals()方法正確
  • 確保有圍繞整個create()方法
  • 同步()鎖