java的HashMap的get方法线程安全吗?

在并发情景下,如果只用HashMap的get方法(不用put),因为我的Map是放配置数据的,启动完成后里面的数据不会改变,线程是否安全?

阅读 3.6k
3 个回答

并发的线程安全,通常指多个线程,同时读写,导致变量的值存在不一致等情况。
那只读不写,也就没这种风险了。
不过为了避免,建议封装一层工具类,这个存放配置的hashMap作为内部参数,工具类对外只提供get方法,这样约束一下业务代码,不要直接操作hashMap,而且后续如果需要提供修改等方法的时候,也方便替换为线程安全的方式

只读操作是线程安全的,只要确保new的时候(看你是否延迟加载了)线程安全,以及初始化的时候不要去get就行.

问法本身有点儿问题。

谈及线程安全,需要从原子性、可见性、有序性三个角度出发。显然 HashMap 并不满足这些条件,所以它是非线程安全的。

但如果确实如你所言的这种场景的话,此时业务上不会出现脏读、幻读等问题,但并不能说它是线程安全的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏