【问题标题】:How to change HashMap as Synchoronized如何将 HashMap 更改为同步
【发布时间】:2012-11-20 02:21:43
【问题描述】:

是否可以将 HashMap 更改为同步。如果是这样,请告诉我如何更改它。

【问题讨论】:

标签: java concurrency synchronization hashmap hashtable


【解决方案1】:

ConcurrentHashMap 是同步实现之一。

根据javadoc

支持检索的完全并发和可调整的预期更新并发的哈希表。此类遵循与 Hashtable 相同的功能规范,并包含与 Hashtable 的每个方法对应的方法版本。但是,即使所有操作都是线程安全的,检索操作也不需要锁定,并且不支持以阻止所有访问的方式锁定整个表。在依赖线程安全但不依赖同步细节的程序中,此类与 Hashtable 完全可互操作

【讨论】:

    【解决方案2】:

    使用Collections.synchronizedMap(new HashMap());

    【讨论】:

      【解决方案3】:
      Collections.synchronizedMap(map);
      

      返回由指定映射支持的同步(线程安全)映射。为了保证串行访问,所有对 backing map 的访问都必须通过返回的 map 完成。

      文档:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#synchronizedMap%28java.util.Map%29

      【讨论】:

        【解决方案4】:

        为了同步一个HashMap,你可以使用

        Collections.synchronizedMap(<your hashmap reference>) 
        

        这将为您返回一个同步的地图,这是线程安全的。

        【讨论】:

          猜你喜欢
          • 2011-10-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-14
          • 2015-10-27
          • 2019-01-14
          • 2014-01-03
          • 1970-01-01
          相关资源
          最近更新 更多