当我使用下面显示的代码时,IntelliJ IDEA在代码DecibelSample
中告诉我“期望的表达”。那是什么意思,我该如何解决?
if (mDecibelSample == null) {
synchronized (DecibelSample) { // expression expected
if (mDecibelSample == null) {
mDecibelSample = new DecibelSample();
}
}
}
最佳答案
假设DecibelSample
是一个类,则这不是有效的Java代码。
像这样修改您的代码,以消除编译错误:
synchronized (DecibelSample.class) {}
您的代码将无法正常工作,因为
synchronized
需要锁定某些实例。在上面的修改示例中,它将使用Class
实例。您也可以将其更改为
synchronized (this) {}
,在这种情况下,它将使用您的方法所在的类的实例作为锁。第三种选择是定义要用作锁的任意对象,例如:
private static final Object LOCK = new Object();
...
public void foo() {
synchronized(LOCK) {}
}
这可能是最好的方法,因为针对当前实例或类实例进行锁定有一些缺点。有关更多详细信息,请参见此SO answer:
有关
synchronized
关键字的更多信息,可以在Java Language Specification中找到。