我试图创建以下情形细晶粒的锁定机制:Java:细粒度锁定请求?
我有一个数据存储与它里面很多系列化Cache
对象。每个Cache
属于某个人,团体或公司,每个Cache
可以通过四种方式之一进行修改:可以创建,删除,删除或插入。虽然Cache
正在修改,我想阻止对它的访问。每个Cache
都使用一个CacheLocation
对象进行标识,该对象存储目录和文件名以及完整路径以方便使用。
目前,我正在使用名为RequestQueue
的类内部的数组列表,其中包含当前正在处理的CacheLocation
个对象。然后,当另一个线程进来时,它会检查队列,看它正在请求的CacheLocation
是否已被使用。如果是这种情况,则使用while循环来定期检查CacheLocation
,直到放置它的请求将其删除。
我想这可能是一个想法,有一个HashMap的CacheLocation
键与BlockingQueue
值。这会产生大量的BlockingQueue
对象,但我可以很好地管理队列。
有没有更好的方法来做这种细粒锁定?
不要使用while循环等待资源。两个或多个线程可以同时具有该条件为真,并中断序列化访问。相反,使用syncronized或锁 – Evans 2013-05-13 11:45:03
我以前试过,但可能错了。我正在调用getMap来查看请求CacheLocation是否在Map中(我想我需要使用ConcurrentHashMap),并且如果返回一个位置,我正在同步并调用对象的等待。我遇到的问题是被调用来从其他线程通知导致IllegalMonitorStateException。不知道为什么,因为另一个线程应该已经创建了对象,但它需要更多的研究:) – 2013-05-13 12:01:59