Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hazelcast IMap-对同一密钥、不同值的并发更新_Java_Multithreading_Concurrency_Hazelcast - Fatal编程技术网

Java Hazelcast IMap-对同一密钥、不同值的并发更新

Java Hazelcast IMap-对同一密钥、不同值的并发更新,java,multithreading,concurrency,hazelcast,Java,Multithreading,Concurrency,Hazelcast,没有测试,因为我被困在火车上,电池没电了 我需要确定Hazelcast的IMap并发更新是否是线程安全的,更新同一个键但该键的不同值 例如: 假设我有两个不同的线程更新同一个IMap密钥 出于所有目的,此地图如下所示: key: {value1: 1, value2: 2} 一条线说 "I am updating value1 to 3" 另一个线程说(同时) Hazelcast是如何处理的 最终结果会像下面这样吗 key: {value1: 3, value2: 4} Haz

没有测试,因为我被困在火车上,电池没电了

我需要确定Hazelcast的IMap并发更新是否是线程安全的,更新同一个键但该键的不同值

例如:

假设我有两个不同的线程更新同一个IMap密钥

出于所有目的,此地图如下所示:

  key: {value1: 1, value2: 2}
一条线说

  "I am updating value1 to 3"
另一个线程说(同时)

Hazelcast是如何处理的

最终结果会像下面这样吗

  key: {value1: 3, value2: 4}

Hazelcast使用分区。键被散列以找到该项的正确分区

每个分区都是单线程的,只有一个分区线程处理每个分区。因此,单个密钥的两个更新由单个分区线程处理

如果两个更新的键都位于同一个分区中,则这些操作将在单个分区线程上按顺序进行。如果每个键位于不同的分区中,则不同的线程将处理每个更新

我真的不理解你的符号:
key:{value1:1,value2:2}
->它看起来像一个嵌套的映射


您还可以说:
相同的键,但该键的值不同。
->在映射中,每个键只有一个值(除非该值是集合或映射)

Hazelcast使用分区。键被散列以找到该项的正确分区

每个分区都是单线程的,只有一个分区线程处理每个分区。因此,单个密钥的两个更新由单个分区线程处理

如果两个更新的键都位于同一个分区中,则这些操作将在单个分区线程上按顺序进行。如果每个键位于不同的分区中,则不同的线程将处理每个更新

我真的不理解你的符号:
key:{value1:1,value2:2}
->它看起来像一个嵌套的映射


也可以说:
相同的键,但该键的值不同。
->在映射中,每个键只有一个值(除非该值是集合或映射)

是,因此在我的示例中,键的“值”实际上是一个映射。你说分区是单线程的。这是否意味着Hazelcast会在每次更新其值时为我锁定密钥?我想确定我自己不需要锁钥匙。我有不同的过程,将同时更新值映射中的不同变量。他们永远不会更新相同的变量,但是他们将更新相同的密钥。不需要锁定。单个键的每个值更新都是单线程的。(与实际值无关)。如果两个线程试图同时创建密钥,如何避免必须锁定?在本例中,我希望第二个线程使用我的更新逻辑而不是创建逻辑。是的,因此在我的示例中,键的“值”实际上是一个映射。你说分区是单线程的。这是否意味着Hazelcast会在每次更新其值时为我锁定密钥?我想确定我自己不需要锁钥匙。我有不同的过程,将同时更新值映射中的不同变量。他们永远不会更新相同的变量,但是他们将更新相同的密钥。不需要锁定。单个键的每个值更新都是单线程的。(与实际值无关)。如果两个线程试图同时创建密钥,如何避免必须锁定?在这种情况下,我希望第二个线程使用我的更新逻辑而不是创建逻辑。
  key: {value1: 3, value2: 4}