Java 是否有任何hashmap将方法置于线程安全状态,而将方法置于线程不安全状态

Java 是否有任何hashmap将方法置于线程安全状态,而将方法置于线程不安全状态,java,hashmap,Java,Hashmap,我正在设置一个新服务器,并希望在服务器的初始时间将大量元素放入hashmap以节省初始时间,因此我希望hashmap的put方法是线程安全的。但是在初始时间之后,hashmap将不会更改并且是只读的,所以我希望hashmap的get方法是线程不安全的,这足以获得更好的性能 如果我使用ConcurrentHashMap来设置服务器,那么当使用多线程获取元素时,它将不够好 因此,是否有任何hashmap将方法置于线程安全状态,而将方法置于线程不安全状态。如果ConcurrentHashMap由于占用

我正在设置一个新服务器,并希望在服务器的初始时间将大量元素放入hashmap以节省初始时间,因此我希望hashmap的put方法是线程安全的。但是在初始时间之后,hashmap将不会更改并且是只读的,所以我希望hashmap的get方法是线程不安全的,这足以获得更好的性能

如果我使用ConcurrentHashMap来设置服务器,那么当使用多线程获取元素时,它将不够好


因此,是否有任何hashmap将方法置于线程安全状态,而将方法置于线程不安全状态。

如果
ConcurrentHashMap
由于占用额外空间而对您不利,则可以执行以下操作。对于启动时用于填充映射的每个线程,创建自己的
HashMap
并填充它。之后,您将所有这些映射合并到一个
HashMap
(在单个线程中执行此操作,或者使用1个线程合并来自线程1和2的映射,使用线程3合并来自线程3和4的映射,依此类推,然后重复此操作,直到最终得到单个大型映射)。然后,您可以在只读模式下使用该
HashMap

你怎么能没有线程安全的
get
get
不会对映射进行变异,因此保证它是线程安全的。由于您在服务器初始时创建只读映射,并且没有人会更改它,我认为
HashMap
就足够了。为什么
put()
需要线程安全?如果我使用ConcurrentHashMap设置服务器,使用多线程获取元素是不够的。你有足够的基准来证明这一点吗?@Sweeper就是这样