java - ConcurrentHashMap 保证
问题描述
我在某些服务类中有并发哈希图:
class MyClass implements Flushable {
private volatile ConcurrentHashMap<Integer, Object> hashMap = ...
public void add(int id, Object value) {
hashMap.put(id, value);
}
@Override
public void flush() throws IOException {
hashMap.foreach((k, v) -> ...)
hashMap.clear();
}
}
我是否需要做一些额外的锁定以确保:1. flush 将处理所有映射条目(如果在 foreach 和 clear 之间调用 add 怎么办?) 2. clear 不会删除在 foreach 之后插入/更新的条目
从 javadoc 可以保证更新发生在读取之前。据我所知,clear
会阻止put
调用,但是要达到我想要的,我需要一些额外的锁。
解决方案
在您的情况下,您需要在此处进行任何额外的锁定,两者都是操作应该被锁定,清除方法也可以在段级别锁定..
推荐阅读
- javascript - 无法实现http请求并行
- android - Android 操作系统版本与支持的 Google Play 服务版本之间是否存在关联?
- r - 如何制作显示R中负值的条形图?
- regex - 正则表达式匹配证书字符串中的两个特定专有名称
- java - 按列中的值对二维整数数组进行排序
- amazon-web-services - 外部 terraform 数据源期望什么输入?
- asp.net - 使用文本框中的值在 asp.net Web 表单中使用 WEBAPI PUT 方法
- javascript - Example1 和 Example2 有什么区别?
- javascript - 从其他监听器调用监听器
- python - 如何在 python 中循环所有这些代码