Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java双重检查单例实例错误_Java_Design Patterns_Singleton - Fatal编程技术网

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方法的非法修饰符;只允许公共、受保护、私有、抽象、静态、最终、同步、本机和strictfp

Volatile不能用于方法,只能用于字段

8.3.1.4。易变场

[……]

Java编程语言提供了第二种机制,volatile 字段,这比出于某些目的锁定更方便

字段可以声明为volatile,在这种情况下,Java内存模型 确保所有线程都能看到变量的一致值 (§17.4)


因此,您可以使用volatile标记实际字段
singletonistance
,但不能标记检索实例的方法。

或者更准确地说,将其从方法签名移动到字段声明。