java双重检查单例实例错误
我试图实现双重检查,但出现此错误java双重检查单例实例错误,java,design-patterns,singleton,Java,Design Patterns,Singleton,我试图实现双重检查,但出现此错误 static UserPayments singletonInstance; public static volatile UserPayments getSingletonInstance(){ if (null == singletonInstance) { synchronized (UserPayments.class){ if (null == singletonInstance){ singleton
static UserPayments singletonInstance;
public static volatile UserPayments getSingletonInstance(){
if (null == singletonInstance) {
synchronized (UserPayments.class){
if (null == singletonInstance){
singletonInstance = new UserPayments();
}
}
}
return singletonInstance;
}
getSingletonInstance方法的非法修饰符;只允许公共、受保护、私有、抽象、静态、最终、同步、本机和strictfpVolatile不能用于方法,只能用于字段 从 8.3.1.4。易变场 [……] Java编程语言提供了第二种机制,volatile 字段,这比出于某些目的锁定更方便 字段可以声明为volatile,在这种情况下,Java内存模型 确保所有线程都能看到变量的一致值 (§17.4)
因此,您可以使用volatile标记实际字段
singletonistance
,但不能标记检索实例的方法。或者更准确地说,将其从方法签名移动到字段声明。