这段代码是否解决了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;
}
}
需要注意以下两个方面:
getInstance()
方法没有同步,因此在初始化INSTANCE后,不需要同步的成本。createInstance()
方法是同步的。
所以,问题是:这段代码有任何问题吗?它是否合法并且始终线程安全?