Hazelcast IMap put方法获取存储桶或分区或键上的锁吗?
java.util.concurrent.ConcurrentHashMap
的put方法获取存储桶上的锁并写入Map。
而在Hazelcast IMap中,它是java.util.concurrent.ConcurrentHashMap
的分布式地图实现,而以下代码由一个Hazelcast节点执行时。
imap.put(key, value);
它是否获得对存储桶,分区或密钥的锁定?请说清楚?
在hazelcast文档中,我看不到任何答案。
答案 0 :(得分:2)
IMap.put不获取任何锁定。每个Hazelcast成员都有一组特定的分区,这些分区由许多分区线程处理。每个分区线程拥有一定数量的分区。因此,当写操作到达集群成员时,它由拥有该分区的分区线程选择,该分区将是该写操作中Entry对象的宿主。
如果同一成员收到另一个写操作,该操作指定给同一分区线程拥有的相同或其他分区,则直到该线程的上一次写操作完成后,才会选择它。这可以防止任何潜在的竞争情况,并且不需要显式锁定默认状态。
但是,一个人可以使用IMap API来获取键锁。
有关Hazelcast线程模型的详细信息,请参见此处:https://docs.hazelcast.org/docs/3.10.5/manual/html-single/index.html#threading-model