- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Singleton 类,在构造函数中进行了双重检查。
Findbugs 报告以下错误。
在 ... NP_LOAD_OF_KNOWN_NULL_VALUE 中加载已知空值
class SomeClass {
private Object lock = new Object();
private Map<String,Resource> resourceMap = new HashMap<>();
public Resource getResource(String resourceId) {
if (resourceMap.get(resourceId) == null) {
synchronized(lock) {
if (resourceMap.get(resourceId) == null)
Resource resource = new Resource();
resourceMap.put(resourceId,resource);
}
}
return resourceMap.get(resourceId);
}
}
我可以使用静态对象引用,但要求是为唯一请求 ID 创建单个对象。
比如说,请求 ID 1 将用于多个请求。因此,我们必须为此在运行时为所有请求 ID 创建一个对象。
谢谢,
最佳答案
您应该使用 ConcurrentMap 而不是双重检查锁定模式。关于 map 元素的可见性,您的方法不正确(有关可见性的更多详细信息,请参阅以下 question)。
class SomeClass {
private final ConcurrentMap<String, Resource> resourceMap = new ConcurrentHashMap<>();
public Resource getResource(String resourceId) {
return resourceMap.computeIfAbsent(resourceId, r -> new Resource());
}
private static class Resource {}
}
使用 LRU 替换策略编辑以限制为 10 个元素
您可以使用 Guava cache默认使用 LRU 策略 size-based eviction .
import com.google.common.cache.*;
class SomeClass {
private final LoadingCache<String, Resource> resourceMap =
CacheBuilder.newBuilder()
.maximumSize(10L)
.build(new CacheLoader<String, Resource>() {
@Override
public Resource load(String key) {
return new Resource();
}
});
public Resource getResource(String resourceId) {
return resourceMap.getUnchecked(resourceId);
}
private static class Resource {
}
}
关于java - Findbugs:NP_LOAD_OF_KNOWN_NULL_VALUE - 单例类双重检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39822749/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!