私は、Javaの揮発性変数を理解するのが少し難しいです。揮発性変数には同期アクセスが必要ですか?
私はそうのような揮発性の変数を含むパラメータ化クラスを持っている:
public class MyClass<T> {
private volatile T lastValue;
// ... other code ...
}
は、私がget-値-IF--nullでないなど、lastValue
に対して一定の基本的な操作を実装する必要があります。
これらの操作を同期させる必要がありますか?次の方法をやってもらえますか?
public void doSomething() {
String someString;
...
if (lastValue != null) {
someString += lastValue.toString();
}
}
同期されたブロックにヌルチェックを付ける必要がありますか?
public void doSomething() {
String someString;
...
synchronized(this) {
if (lastValue != null) {
someString += lastValue.toString();
}
}
}
私が取得し、セットのようなアトミック操作のために、私は同期適用せずに[OK]でなければならないことを知っている(例えば。public T getValue() { return lastValue; }
)。しかし、私は非原子操作についてはわかりませんでした。
;' 'のようにsomeString + =( "" + lastValue);' 'あなたは完全にチェックNULL'を取り除くことができます:上
詳細。 – dasblinkenlight
@dasblinkenlight、trueですが、lastValueがnullの場合、結果の文字列に "null"という単語が表示されても問題ない場合に限ります。 –
@IanMcLairdああ、そうです、Javaはそれを忘れています(それは.NETでありません)。 – dasblinkenlight