example atomicinteger java concurrency atomic

atomicinteger - ¿Cuándo usar AtomicReference(Java)? ¿Es realmente necesario?



atomicinteger java (1)

Es una referencia , entonces eso es lo que se compara. La documentación deja muy claro que se trata de una comparación de identidad, incluso utilizando la operación == en su descripción.

Uso AtomicReference y otras clases atómicas con mucha frecuencia. La creación de perfiles muestra que funcionan mejor que los métodos equivalentes mediante la sincronización. Por ejemplo, una operación get() en una AtomicReference solo requiere una recuperación de la memoria principal, mientras que una operación similar que utiliza synchronized debe enjuagar primero los valores almacenados en caché por subprocesos en la memoria principal y luego realizar su recuperación.

Las clases de AtomicXXX proporcionan acceso a soporte nativo para operaciones de comparación e intercambio (CAS). Si el sistema subyacente lo admite, CAS será más rápido que cualquier esquema preparado con bloques synchronized en Java puro.

He usado AtomicLong muchas veces pero nunca he necesitado utilizar AtomicReference

Parece que AtomicReference lo hace (copié este código de otra pregunta de stackoverflow):

public synchronized boolean compareAndSet(List<Object> oldValue, List<Object> newValue) { if (this.someList == oldValue) { // someList could be changed by another thread after that compare, // and before this set this.someList = newValue; return true; } return false; }

O

public synchronized boolean compareAndSet(List<Object> oldValue, List<Object> newValue) { if (this.someList == oldValue || this.someList.equals(oldValue)) { // someList could be changed by another thread after that compare, // and before this set this.someList = newValue; return true; } return false; }

Suponga que this.someList está marcado como volátil.

No estoy seguro de cuál es realmente porque el javadoc y el código para esa clase no están claros si se usa .equals.

Al ver cómo los métodos anteriores no son tan difíciles de escribir, ¿alguna vez alguien ha utilizado AtomicReference?