jimu-decompiled/sources/com/google/common/util/concurrent/AtomicDouble.java
2025-05-13 19:24:51 +02:00

100 lines
2.9 KiB
Java

package com.google.common.util.concurrent;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.concurrent.atomic.AtomicLongFieldUpdater;
/* loaded from: classes.dex */
public class AtomicDouble extends Number implements Serializable {
private static final long serialVersionUID = 0;
private static final AtomicLongFieldUpdater<AtomicDouble> updater = AtomicLongFieldUpdater.newUpdater(AtomicDouble.class, "value");
private volatile transient long value;
public AtomicDouble(double d) {
this.value = Double.doubleToRawLongBits(d);
}
private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
objectInputStream.defaultReadObject();
set(objectInputStream.readDouble());
}
private void writeObject(ObjectOutputStream objectOutputStream) throws IOException {
objectOutputStream.defaultWriteObject();
objectOutputStream.writeDouble(get());
}
public final double addAndGet(double d) {
long j;
double longBitsToDouble;
do {
j = this.value;
longBitsToDouble = Double.longBitsToDouble(j) + d;
} while (!updater.compareAndSet(this, j, Double.doubleToRawLongBits(longBitsToDouble)));
return longBitsToDouble;
}
public final boolean compareAndSet(double d, double d2) {
return updater.compareAndSet(this, Double.doubleToRawLongBits(d), Double.doubleToRawLongBits(d2));
}
@Override // java.lang.Number
public double doubleValue() {
return get();
}
@Override // java.lang.Number
public float floatValue() {
return (float) get();
}
public final double get() {
return Double.longBitsToDouble(this.value);
}
public final double getAndAdd(double d) {
long j;
double longBitsToDouble;
do {
j = this.value;
longBitsToDouble = Double.longBitsToDouble(j);
} while (!updater.compareAndSet(this, j, Double.doubleToRawLongBits(longBitsToDouble + d)));
return longBitsToDouble;
}
public final double getAndSet(double d) {
return Double.longBitsToDouble(updater.getAndSet(this, Double.doubleToRawLongBits(d)));
}
@Override // java.lang.Number
public int intValue() {
return (int) get();
}
public final void lazySet(double d) {
set(d);
}
@Override // java.lang.Number
public long longValue() {
return (long) get();
}
public final void set(double d) {
this.value = Double.doubleToRawLongBits(d);
}
public String toString() {
return Double.toString(get());
}
public final boolean weakCompareAndSet(double d, double d2) {
return updater.weakCompareAndSet(this, Double.doubleToRawLongBits(d), Double.doubleToRawLongBits(d2));
}
public AtomicDouble() {
}
}