Hazelcast IMap put方法获取存储桶或分区或键上的锁?

时间:2018-09-25 10:52:05

标签: java multithreading synchronization thread-safety hazelcast

Hazelcast IMap put方法获取存储桶或分区或键上的锁吗? java.util.concurrent.ConcurrentHashMap的put方法获取存储桶上的锁并写入Map。
而在Hazelcast IMap中,它是java.util.concurrent.ConcurrentHashMap的分布式地图实现,而以下代码由一个Hazelcast节点执行时。
imap.put(key, value);
它是否获得对存储桶,分区或密钥的锁定?请说清楚? 在hazelcast文档中,我看不到任何答案。

1 个答案:

答案 0 :(得分:2)

IMap.put不获取任何锁定。每个Hazelcast成员都有一组特定的分区,这些分区由许多分区线程处理。每个分区线程拥有一定数量的分区。因此,当写操作到达集群成员时,它由拥有该分区的分区线程选择,该分区将是该写操作中Entry对象的宿主。

如果同一成员收到另一个写操作,该操作指定给同一分区线程拥有的相同或其他分区,则直到该线程的上一次写操作完成后,才会选择它。这可以防止任何潜在的竞争情况,并且不需要显式锁定默认状态。

但是,一个人可以使用IMap API来获取键锁。

有关Hazelcast线程模型的详细信息,请参见此处:https://docs.hazelcast.org/docs/3.10.5/manual/html-single/index.html#threading-model