Al trabajar con AtomicInteger y AtomicLong en Java, nos podemos topar con la duda de cómo encontrar y utilizar AtomicFloat y/o Atomic Double, y aquí te explicamos cómo utilizar estas clases:
Según la documentación oficial, en el paquete java.concurrent.atomic podemos encontrar las clases AtomicInteger y AtomicLong, al ser muy útiles en multitud de aplicaciones.
Sin embargo, hay casos poco frecuentes en los que queremos utilizar otro tipo de datos y para ese caso, se pueden utilizar AtomicInteger (Para contener valores de byte y float, utilizando Float.floatToIntBits y Float.intBitsToFloat) y AtomicLong (para valores double utilizando Double.doubleToLongBits y Double.longBitsToDouble).
Una de las utilidades es, por ejemplo, encapsular un AtomicInteger o AtomicFloat, proveyendo los métodos de acceso para getFloat/setFloat, getDouble/setDouble, etc.
Aqui te mostramos un ejemplo de un AtomicFloat encapsulando a un AtomicInteger:
} public AtomicFloat(float initialValue) { bits = new AtomicInteger(floatToIntBits(initialValue)); } public final boolean compareAndSet(float expect, float update) { return bits.compareAndSet(floatToIntBits(expect), floatToIntBits(update)); } public final void set(float newValue) { bits.set(floatToIntBits(newValue)); } public final float get() { return intBitsToFloat(bits.get()); } public float floatValue() { return get(); } public final float getAndSet(float newValue) { return intBitsToFloat(bits.getAndSet(floatToIntBits(newValue))); } public final boolean weakCompareAndSet(float expect, float update) { return bits.weakCompareAndSet(floatToIntBits(expect), floatToIntBits(update)); } public double doubleValue() { return (double) floatValue(); } public int intValue() { return (int) get(); } public long longValue() { return (long) get(); } }
Cuéntanos en un comentario, ¿en qué casos implementarías este tipo de clases?
No hay comentarios:
Publicar un comentario