此代码是否解决了 Java 中的双重检查锁定问题?
public class DBAccessService() {
private static DBAccessService INSTANCE;
private DBAccessService() {}
public static DBAccessService getInstance() {
if (INSTANCE != null) {
return INSTANCE;
}
return createInstance();
}
private static synchronized DBAccessService createInstance() {
if (INSTANCE != null) {
return INSTANCE;
}
DBAccessService instance = new DBAccessService();
INSTANCE = instance;
return INSTANCE;
}
}
有2个方面需要注意:
getInstance()
是不同步的,所以在初始化 INSTANCE 之后,同步是没有成本的createInstance()
是同步的
所以,问题是:这段代码有什么问题吗?它是否合法且始终是线程安全的?