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读取值的过程中,它也会使用一些内部字段,这些字段将在写入线程和读取线程之间共享,这可能会导致读取不一致的状态。