Java: AtomicFloat y AtomicDouble


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