私は、何かが予想外の場合にトリガーされるべき行動が存在することがよくあります。残念ながら、compareAndSetはこの種の原子的な問題には適していません。私はcompareAndSetIfUnequalのようなものが必要です。現在、私は以下のコードのようなものを使用しますが、私はそれが高価である怖い:!= value(compareAndSetIfUnequal)のcompareAndSetはありますか?
private AtomicReference<T> atomic = new AtomicReference<T>(null);
public static void doIfUnequal(T obj) {
if(atomic.getAndSet(obj) != obj) {
doSomething();
}
}
compareAndSetIfUnequalがある:あなたが「設定」の部分(とアトミックオペレーションの関連ハードウェアのオーバーヘッド)を回避したい場合は
しかし、あなたはループ自身がのcompareAndSetを取得使用して、この1する必要があります機能的には単純なセットと同じですね。 –