クラスに次のメソッドを使用して永続アイテムからロードするためのクラスがありますPersistenceController
。
Item loadItem(int id);
そこで、他のコントローラーに次のメソッドを実装したいと思います。
synchronized Item getItem(int id){
Item result= getItemFromMemory(id);
if (result==null){
result=PersistenceController.loadItem(id);
}
return result;
}
目標は、同時にメモリ内に同じIDを持つアイテムのインスタンスを1つ(またはゼロ)だけ確保することです。この方法は機能しますが、1つの問題があります。すべてのロードアイテムは互いに待機する必要があります。両方が同じIDを持っている場合にのみ、他の呼び出しを待機するように同期スキームを変更したいと思います。
これを行うための最良の方法は何ですか?