使用Hazelcast锁定地图项目



我需要在没有任何其他线程拦截的情况下同时锁定一些映射项。我的意思是,我想锁定10个项目,我想我需要使用一个循环,但我不想在锁定第5个项目后被阻止锁定剩余的5个项目。我需要使用另一个独立于映射的锁来包装锁定代码块吗?

我认为除了确保按相同顺序锁定项之外,没有任何方法可以防止用例中潜在的死锁(我认为这是您想要防止的)。

在开始锁定之前,只需确保对要锁定的密钥应用了一些排序(就像只使用List和Comparator的自然排序一样)。在这种情况下,将以相同的顺序获取所有锁。尽管如此,您可能会遇到这样的情况:一个操作可能会获取1, 2, 3,而另一个操作则可能获取2, 3, 4。也就是说,第一操作将成功地获取1,但是可能在2处被阻止。

问题是,您的用例是什么?你可能更适合使用不同的方法。如果键ALWAYS属于一起,则应用Data Affinity并使用EntryProcessor可能更有用。对于其他用例,可能还有一种更好的方法,而不是使用多个锁。锁在多线程系统中通常是个坏主意,在高度并行的分布式系统中也不会做得更好。

最新更新