java double double检查单例实例错误

时间:2016-07-22 09:49:35

标签: java design-patterns singleton

我正在尝试实施双重检查,但收到此错误。

static UserPayments singletonInstance;

public static volatile UserPayments getSingletonInstance(){
if (null == singletonInstance) {
    synchronized (UserPayments.class){
        if (null == singletonInstance){
            singletonInstance = new UserPayments();
        }
    }
}
return singletonInstance;

}

方法getSingletonInstance的非法修饰符;只有public,protected,private,abstract,static,final,synchronized,native&允许使用strictfp

1 个答案:

答案 0 :(得分:1)

Volatile不能用于方法,仅用于字段。

来自Java Language Specification:

  

8.3.1.4。 volatile字段

     

[...]

     

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

     

字段可以声明为volatile,在这种情况下是Java Memory Model   确保所有线程都看到变量的一致值   (§17.4)。

因此,您可以使用volatile标记实际字段singletonInstance,而不是检索实例的方法。