我正在尝试实施双重检查,但收到此错误。
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/