Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/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
Concurrency 是否需要从HashMap同步读取?_Concurrency_Hashmap_Synchronization - Fatal编程技术网

Concurrency 是否需要从HashMap同步读取?

Concurrency 是否需要从HashMap同步读取?,concurrency,hashmap,synchronization,Concurrency,Hashmap,Synchronization,我有一个java.util.HashMap对象。我保证对HashMap的写入是由单个专用线程完成的。但是,可以同时从多个线程读取同一HashMap对象。这样的实现会给我带来麻烦吗?是的,这样的实现会给你带来很大的麻烦 向HashMap添加值不是原子操作。因此,如果从另一个线程读取映射,当另一个线程同时添加值时,可能会看到不一致的状态。这将导致在运行代码时出现随机的意外行为或异常。此外,如果没有同步,当更新的变量对其他线程可见时,就不能保证同步 因此,正如第11维度说明在您的问题评论中所说,您应该

我有一个
java.util.HashMap
对象。我保证对
HashMap
的写入是由单个专用线程完成的。但是,可以同时从多个线程读取同一
HashMap
对象。这样的实现会给我带来麻烦吗?

是的,这样的实现会给你带来很大的麻烦

向HashMap添加值不是原子操作。因此,如果从另一个线程读取映射,当另一个线程同时添加值时,可能会看到不一致的状态。这将导致在运行代码时出现随机的意外行为或异常。此外,如果没有同步,当更新的变量对其他线程可见时,就不能保证同步


因此,正如第11维度说明在您的问题评论中所说,您应该真正使用
ConcurrentHashMap
,或者正确同步对映射的读写访问。

对于多线程程序,始终使用java.util.ConcurrentHashMap。即使在从HashMap读取值的过程中,它也会使用一些内部字段,这些字段将在写入线程和读取线程之间共享,这可能会导致读取不一致的状态。