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

static UserPayments singletonInstance;

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


}

方法getSingletonInstance的非法修饰符;仅允许公共,受保护,私有,抽象,静态,最终,同步,本机和strictfp

最佳答案

挥发性不能用于方法,只能用于字段。

Java Language Specification:


  8.3.1.4。易失字段
  
  [...]
  
  Java编程语言提供了第二种机制,volatile
  字段,这比出于某些目的而锁定更方便。
  
  字段可以声明为volatile,在这种情况下,Java内存模型
  确保所有线程看到变量的一致值
  (第17.4节)。


这样,您可以将实际字段singletonInstance标记为volatile,但不标记检索实例的方法。

关于java - java double double check singleton实例错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38523335/

10-13 06:56