作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试了解多线程。假设我有一个类,它有一个方法可以向 ConcurrentHashMap 添加值。
public void add(ConcurrentHashMap<Integer,String> map){
if(!map.containsKey(1){
map.put(1,"test");
}
}
如何确保在向 map 添加元素时,不同的线程不会删除特定值或删除整个 map 。
我尝试在添加方法中同步(映射),但这不起作用。
编辑1:我没有正确地构建它。我的意思是,如果其他线程使 map 为空,而我无权访问使其为空的代码。如何避免add方法中的空指针异常。我可以在输入方法后测试它是否为空,但是如果在检查之后但在向其添加内容之前它变为空怎么办?
最佳答案
首先,您无法在 Java 中“删除整个 map ”。如果 map 变成垃圾,它就变成垃圾。其次,如果两个线程竞争,就会发生一些事情。该映射将始终有效,并显示两个线程按某种顺序执行操作的结果。这就是并发映射的全部用途——确保映射有效且一致,而不需要您同步其上的操作。
关于java - ConcurrentHashMap 在向其添加元素时被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31909773/
我是一名优秀的程序员,十分优秀!