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.
set
es solo asignar el valor y compareAndSet
está haciendo operaciones adicionales para asegurar la atomicidad.
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;
}