我正在尝试为以下情况创建精细锁定机制:
我有一个数据存储,其中有许多序列化的Cache
对象。每个Cache
都属于某个人,组或公司,并且每个Cache
可以用以下四种方式之一进行修改:可以创建,删除,从其中插入或插入到其中。修改Cache
时,我想阻止对其的访问。每个Cache
使用CacheLocation
对象标识,该对象存储目录和文件名以及完整路径,以方便使用。
目前,我在名为RequestQueue
的类中使用数组列表,该类包含正在处理的当前CacheLocation
对象。然后,当另一个线程进入时,它检查队列以查看其请求的CacheLocation
是否已被使用。如果是这种情况,则使用while循环来定期检查CacheLocation
,直到放入CacheLocation
的请求将其删除为止。
我当时想对BlockingQueue
值使用BlockingQueue
键的HashMap可能是个主意。这将导致大量的对象,但是我可以很好地管理队列。
有没有更好的方法来进行这种细粒度锁定?
最佳答案
如果我正确理解了您的描述,可以使您的设计相当简单的一种方法是:
使用ConcurrentHashMap<CacheLocation, Cache>
来存储缓存(我假设CacheLocation
是不可变的,或者至少从不更改)
确保使用相关的CacheLocation
对象上的锁来保护对缓存的所有访问