java set atomic compare-and-swap

Conjunto de variables atómicas de Java() vs compareAndSet()



atomic compare-and-swap (2)

Quiero saber la diferencia entre set () y compare y establece () en las clases atómicas. ¿El método set () también asegura el proceso atómico? Por ejemplo, este código:

public class sampleAtomic{ private static AtomicLong id = new AtomicLong(0); public void setWithSet(long newValue){ id.set(newValue); } public void setWithCompareAndSet(long newValue){ long oldVal; do{ oldVal = id.get(); } while(!id.compareAndGet(oldVal,newValue) } }

¿Son los dos métodos idénticos?


Como puede ver en el código abierto jdk a continuación.

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/concurrent/atomic/AtomicLong.java#AtomicLong.set%28long%29

set es solo asignar el valor y compareAndSet está haciendo operaciones adicionales para asegurar la atomicidad.

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/concurrent/atomic/AtomicLong.java#AtomicLong.compareAndSet%28long%2Clong%29

El valor de retorno (booleano) debe considerarse para diseñar cualquier operación atómica.


Los métodos set y compareAndSet y compareAndSet actúan de manera diferente:

  • compareAndSet: Atomically establece el valor en el valor actualizado dado si el valor actual es igual (==) al valor esperado.
  • set: establece el valor dado.

¿El método set () también asegura el proceso atómico?

Sí. Es atómico. Porque solo hay una operación involucrada para set el nuevo valor. A continuación se muestra el código fuente del método set :

public final void set(long newValue) { value = newValue; }