当前位置: 首页 > 知识库问答 >
问题:

使用Hazelcast锁定地图项目

姚伟
2023-03-14

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

共有1个答案

梁丘霖
2023-03-14

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

在开始锁定之前,请确保您对要锁定的键应用了一些排序(例如仅使用列表和比较器进行自然排序)。在这种情况下,所有锁都将以相同的顺序获取。尽管如此,您可能会遇到这样的情况,即一个操作可能会获取1,2,3,而另一个操作将获取2,3,4。也就是说,第一个操作将成功获取1,但可能会在2处被阻塞。

问题是,你的用例是什么?你可能最好使用不同的方法。如果键总是属于一起,应用数据亲和力并使用入口处理器可能更有用。对于其他用例,可能仍然有更好的方法来代替使用多个锁。锁在多线程系统中通常是个坏主意,在高度并行的分布式系统中也不会做得更好。

 类似资料:
  • 我想对我的映射myMap使用Quorum进行映射锁定操作。 我对仲裁使用编程配置。 我使用com.hazelcast.config.MapConfig.setQuorumName方法来设置仲裁。 我的地图配置如下,因为仲裁设置为xxx。 MapConfig{name='myMap',inMemoryFormat=BINARY',..,mapAttributeConfigs=null,quorumN

  • 我正在使用Hazelcast Imap接口以分布式方式锁定项目,而不是将项目放在map中,我只是调用lock方法,它似乎有效,但我不知道如何查询哪些项目当前被锁定,因为项目在map中不可用。有没有方法可以查询Hazelcast锁定的键?下面是示例代码:public void testMap_DistributedLock(){final Config hazelcastConfig=new Con

  • 我有一个要求,我无法找到使用hazelcast IMap和ILock构造的解决方案。 我需要跟踪在分布式映射上获取的所有锁(在成功的IMap.tryLock(K key)调用后获取的锁)。每个成功获取的锁都必须与映射中的自定义对象相关联/配对以进行跟踪。(这些自定义对象包含用于监控目的的应用程序特定的储物柜信息。)我想要的是,当成功获取锁时,与锁相关的关联自定义对象必须自动原子地放到映射中。并且当

  • 假设我在IMap中有以下值: 我想找到属于“销售”类别的所有员工。此外,我想在getCategories()上创建一个索引,以便查询快速返回。似乎没有可用的谓词来执行此操作。我该如何实现这一目标?看来我必须写一个谓词才能做到这一点。有没有示例代码可以告诉我如何构建使用索引的谓词?

  • 我最近一直在使用Hamcrest库编写一些测试,非常成功,但现在我需要做一些更复杂的事情,并开始看到很多困难。我需要输入并验证地图中项目的属性。我的生产代码如下所示: 我想写一些像下面这样的测试代码,但是它不编译。看起来Hamcrest的hasEntry是类型参数化的,而hasItem和hasProperty只需要Object。 我的IDE(Eclipse)给出了这个错误消息:参数化方法