次のシナリオで、きめの細かいロック メカニズムを作成しようとしています。
Cache
内部に多くのシリアル化されたオブジェクトを含むデータ ストアがあります。それぞれCache
が特定の人、グループ、または会社に属しており、それぞれCache
を 4 つの方法のいずれかで変更できます: 作成、削除、削除、または挿入できます。aCache
が変更されている間、私はそれへのアクセスをブロックしたいと思います。それぞれは、便宜上、ディレクトリとファイル名、およびフル パスを格納Cache
するオブジェクトを使用して識別されます。CacheLocation
現在、処理中の現在のオブジェクトRequestQueue
を保持するというクラス内で配列リストを使用しています。CacheLocation
次に、別のスレッドが入ってくると、キューをチェックして、CacheLocation
要求しているスレッドが既に使用されているかどうかを確認します。この場合、while ループを使用して、CacheLocation
そこに置かれたリクエストによって削除されるまで、定期的に をチェックし続けます。
値CacheLocation
に対するキーの HashMap を持つことはアイデアかもしれないと考えていました。BlockingQueue
これにより、BlockingQueue
オブジェクトのセットが大きくなりますが、キューをかなりうまく管理できました。
この種の細粒度ロックを行うためのより良い方法はありますか?