Nag*_*esh 1 java multithreading synchronization thread-safety hazelcast
Hazelcast IMap put 方法获取存储桶或分区或键的锁?
java.util.concurrent.ConcurrentHashMapput 方法获取存储桶上的锁并写入 Map。
而在 Hazelcast IMap 中,这是一种分布式地图实现java.util.concurrent.ConcurrentHashMap,当以下代码由一个 Hazelcast 节点执行时。
imap.put(key, value);
它是否获得了对存储桶、分区或密钥的锁定?请说清楚?我在 hazelcast 文档中的任何地方都没有看到这个问题的答案。
小智 5
IMap.put 不获取任何锁。每个 Hazelcast 成员都有一组特定的分区,这些分区由多个分区线程处理。每个分区线程拥有一定数量的分区。因此,当写入操作到达集群成员时,它由拥有分区的分区线程选择,该分区将是该写入操作中 Entry 对象的主机。
如果同一个成员收到另一个写操作,该操作是针对同一分区线程拥有的相同或其他分区的,则在该线程的前一个写操作完成之前不会选择它。这可以防止任何潜在的竞争条件,并且不需要在默认状态下显式锁定。
一种,但是可以通过使用 IMap API 获取键上的锁。
有关 Hazelcast 线程模型的详细信息,请参见此处:https ://docs.hazelcast.org/docs/3.10.5/manual/html-single/index.html#threading-model