我基本上是在寻找HelperWrapper用户的缓存机制。 这是双重检查单身的正确用法吗?
final class HelperWrapper {
private static volatile Helper helper = null;
public static Helper getHelper() {
if (helper == null) {
synchronized (HelperWrapper.class) {
if (helper == null) {
helper = new Helper();
}
}
}
return helper;
}
}
我知道这不会阻止某人实例化他们自己的Helper对象,但这不是目标。
其他信息:
答案 0 :(得分:2)
从Java 5开始,该实现is safe。但是,请考虑使用内部类:
final class HelperWrapper {
private static final class DeferredLoader {
public static final Helper HELPER_INSTANCE = new Helper();
}
public static Helper getHelper() {
return DeferredLoader.HELPER_INSTANCE;
}
}
这两者都提供线程安全和延迟初始化,同时利用类初始化的线程安全保证,以避免基于每个调用的volatile或同步关键字。