java - 使用多线程时我们是否应该始终使用 ConcurrentHashMap?
问题描述
如果我有一个哈希映射和这个方法:
private Map<String, String> m = new HashMap<>();
private void add(String key, String value) {
String val = m.get(key);
if (val == null) {
m.put(key, value);
}
}
如果我有两个线程 A 和 B 调用具有相同键和值的方法,A 和 B 可能都看到键不在映射中,因此可能同时写入映射。但是,写入顺序(A 在 B 之前或 B 在 A 之前)不应影响结果,因为它们都写入相同的值。但我只是想知道并发写入是否会很危险并可能导致意想不到的结果。在那种情况下,我可能应该使用 ConcurrentHashMap。
解决方案
是的,你应该使用 a ConcurrentHashMap
(它是内部线程安全的),并使用m.putIfAbsent(key, value)
它。
m
也应该是final
,以避免它被重新分配。
推荐阅读
- laravel - 比较 Laravel eloquent 中的日期时间
- javascript - 如何为每个中断行 Javascript 和特定颜色?
- android - Android Jetpack Compose:如何在“盒子”中缩放图像?
- python - 使用 python firebase-admin 获取不存在文档的子集合
- python - pandas数据框的数据框转换
- python - 为什么层batch_normalization_6与层不兼容?
- javascript - 从 node.js 加载 javascript 文件时出错
- python - 发现样本数量不一致的输入变量:[164, 41]
- regex - 正则表达式返回 null 或搜索表达式
- python - 如何在kafka消费者中读取和处理高优先级消息?