我正在尝试实施双重检查,但收到此错误。
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
答案 0 :(得分:1)
Volatile不能用于方法,仅用于字段。
来自Java Language Specification:
8.3.1.4。 volatile字段
[...]
Java编程语言提供了第二种机制,即volatile 字段,这比某些目的的锁定更方便。
字段可以声明为volatile,在这种情况下是Java Memory Model 确保所有线程都看到变量的一致值 (§17.4)。
因此,您可以使用volatile标记实际字段singletonInstance
,而不是检索实例的方法。