Java 多线程访问赢得';不能在创建后进行修改

Java 多线程访问赢得';不能在创建后进行修改,java,multithreading,Java,Multithreading,创建一个映射对象的最佳实践是什么,该对象将从多个线程访问,但在初始化后不会修改 是不是: 使用ConcurrentHashMap对象 创建一个普通的HashMap对象,并将其包装在Collections#unmodifiableMap调用中?仅保留对不可修改映射的引用,而不是原始哈希映射 还有别的 谢谢, 彼得,你为什么不试试看呢?一旦创建,就无法修改,所以不管有多少线程尝试并行读取。为什么不尝试一个?一旦创建,就无法修改,所以不管有多少线程尝试并行读取。我相信(在提供的选项中)选项2可能会更有

创建一个
映射
对象的最佳实践是什么,该对象将从多个线程访问,但在初始化后不会修改

是不是:

  • 使用
    ConcurrentHashMap
    对象
  • 创建一个普通的
    HashMap
    对象,并将其包装在
    Collections#unmodifiableMap
    调用中?仅保留对
    不可修改映射
    的引用,而不是原始
    哈希映射
  • 还有别的
  • 谢谢, 彼得,你为什么不试试看呢?一旦创建,就无法修改,所以不管有多少线程尝试并行读取。

    为什么不尝试一个?一旦创建,就无法修改,所以不管有多少线程尝试并行读取。

    我相信(在提供的选项中)选项2可能会更有效

    根据Javadoc,提供了一个哈希表,支持检索的完全并发性和更新的可调整预期并发性

    它必须执行一些工作来提供这一点,只需保持不变的
    映射
    实例,并让多个读者访问它。

    我相信(在提供的选项中)选项2可能会更有效

    根据Javadoc,提供了一个哈希表,支持检索的完全并发性和更新的可调整预期并发性



    它必须执行相应的工作,只需保持不变的
    Map
    实例,并让多个读者访问它。

    我会选择第二个,或者只是编写类,这样就没有对它的写访问权。这也是我的直觉,但我不确定同时阅读
    HashMap
    是否会产生任何意外的副作用。我要明确的是,该映射是否会安全地发布到那些多线程(即,在没有数据竞争的情况下发布)?是的,只有在单个线程中完全加载后才会发布。我会选择第二个,或者只是编写类,这样就没有对它的写访问权限。这也是我的直觉,但我不确定同时阅读
    HashMap
    是否会产生任何意外的副作用。我要明确的是,映射是否会安全地发布到那些多线程(即,在没有数据竞争的情况下发布)?是的,它只有在一个线程中完全加载后才会发布。与选项2相比,它有什么优势?根据文档,“与Collections.unmodifiableMap不同。”(java.util.MapYeah,但他无论如何都要摆脱原始映射。好吧,肯定有多种方法可以实现OP想要的,这只是其中之一。哪种方法最适合这个目的,只有OP可以回答:)就像可变HashMap一样。与选项2相比有什么优势?根据文档,”不同于Collections.unmodifiableMap(java.util.MapYeah,但他无论如何都要摆脱原始地图。当然,有多种方法可以实现OP想要的,这只是其中之一。哪种方法最适合这个目的,只有OP才能回答:)正如可变HashMap所做的那样。确定-当使用不可修改的映射视图包装时,仅读取<代码>HashMap不应有任何副作用?确定-当使用不可修改的映射视图包装时,仅读取<代码>HashMap不应有任何副作用?