que - java thread safe boolean
¿Por qué java.util.concurrent.atomic.AtomicBoolean se implementa internamente con int? (2)
AtomicBoolean almacena su valor en:
private volatile int value;
Entonces, por ejemplo, extraer su valor se hace así:
public final boolean get() {
return value != 0;
}
¿Cuál es la razón detrás de esto? ¿Por qué no se utilizó boolean
?
AFAIK, int
es el tipo de operación CAS más pequeño que se puede implementar en diferentes tipos de máquinas.
Nota: como las asignaciones de objetos están alineadas con 8 bytes, usar un tipo más pequeño no ahorraría ninguna memoria.
Es probable que esto sea para poder basar varias de las clases Atomic
en la misma base (no Unsafe
), que utiliza números enteros y proporciona la operación de comparación e intercambio.
La concurrencia en la práctica proporciona una buena explicación del funcionamiento interno.