1
持久裝載機我必須從以下方法持久性項目加載類:同步在java中
Item loadItem(int id);
所以現在我想實施其他控制器的以下方法:
synchronized Item getItem(int id){
Item result= getItemFromMemory(id);
if (result==null){
result=PersistenceController.loadItem(id);
}
return result;
}
目標是確保同時在內存中只有一個具有相同ID的項目的實例(或零個)。此方法有效,但有一個問題:每個加載項必須等待對方。我想改變同步方案,以便只有在兩個ID都相同的情況下才能進行呼叫等待。
最好的辦法是做什麼?
然後你必須對id進行鎖定。看到這個答案 [1]:http://stackoverflow.com/questions/659915/synchronizing-on-an-integer-value – MLN
你的ids真的表示爲int基元?如果你爲你的id類使用一個對象,你可以在ID對象本身上進行同步,而不是同步getItem方法。 – Luhar
我不知道你可以從一個整數中獲取互斥量。我有一個關於它的問題?如果在程序的另一部分使用相同的技術(用於其他不相關的任務)和ID碰撞?這可能以不正確的等待權利結束?我正在考慮使用SparseArray