我在理解 Java 中的 volatile 变量时遇到了一点困难。
我有一个参数化类,其中包含一个 volatile 变量,如下所示:
public class MyClass<T> {
private volatile T lastValue;
// ... other code ...
}
我必须执行某些基本操作,以防止lastValue
包含 get-value-if-not-null。
这些操作需要同步吗?我可以通过以下方法逃脱吗?
public void doSomething() {
String someString;
...
if (lastValue != null) {
someString += lastValue.toString();
}
}
还是我需要将空检查粘贴到同步块中?
public void doSomething() {
String someString;
...
synchronized(this) {
if (lastValue != null) {
someString += lastValue.toString();
}
}
}
我知道对于像 get 和 set 这样的原子操作,我应该可以不应用同步(例如。public T getValue() { return lastValue; }
)。但我不确定非原子操作。