在并发情景下,如果只用HashMap的get方法(不用put),因为我的Map是放配置数据的,启动完成后里面的数据不会改变,线程是否安全?
在并发情景下,如果只用HashMap的get方法(不用put),因为我的Map是放配置数据的,启动完成后里面的数据不会改变,线程是否安全?
问法本身有点儿问题。
谈及线程安全,需要从原子性、可见性、有序性三个角度出发。显然 HashMap 并不满足这些条件,所以它是非线程安全的。
但如果确实如你所言的这种场景的话,此时业务上不会出现脏读、幻读等问题,但并不能说它是线程安全的。
12 回答5.9k 阅读
2 回答3.2k 阅读✓ 已解决
3 回答6.9k 阅读✓ 已解决
3 回答3k 阅读✓ 已解决
5 回答4.6k 阅读
4 回答2.3k 阅读
3 回答4.5k 阅读
并发的线程安全,通常指多个线程,同时读写,导致变量的值存在不一致等情况。
那只读不写,也就没这种风险了。
不过为了避免,建议封装一层工具类,这个存放配置的hashMap作为内部参数,工具类对外只提供get方法,这样约束一下业务代码,不要直接操作hashMap,而且后续如果需要提供修改等方法的时候,也方便替换为线程安全的方式