Package com.google.common.cache
Class LongAdder
java.lang.Object
java.lang.Number
com.google.common.cache.Striped64
com.google.common.cache.LongAdder
- All Implemented Interfaces:
LongAddable
,Serializable
One or more variables that together maintain an initially zero
long
sum. When updates
(method add(long)
) are contended across threads, the set of variables may grow dynamically to
reduce contention. Method sum()
(or, equivalently, longValue()
) returns the current
total combined across the variables maintaining the sum.
This class is usually preferable to AtomicLong
when multiple threads update a common
sum that is used for purposes such as collecting statistics, not for fine-grained synchronization
control. Under low update contention, the two classes have similar characteristics. But under
high contention, expected throughput of this class is significantly higher, at the expense of
higher space consumption.
This class extends Number
, but does not define methods such as
equals
, hashCode
and compareTo
because instances are expected to be mutated, and
so are not useful as collection keys.
jsr166e note: This class is targeted to be placed in java.util.concurrent.atomic.
- Since:
- 1.8
-
Nested Class Summary
Nested classes/interfaces inherited from class com.google.common.cache.Striped64
Striped64.Cell
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
add
(long x) Adds the given value.void
Equivalent toadd(-1)
.double
Returns thesum()
as adouble
after a widening primitive conversion.float
Returns thesum()
as afloat
after a widening primitive conversion.(package private) final long
fn
(long v, long x) Version of plus for use in retryUpdatevoid
Equivalent toadd(1)
.int
intValue()
Returns thesum()
as anint
after a narrowing primitive conversion.long
Equivalent tosum()
.private void
void
reset()
Resets variables maintaining the sum to zero.long
sum()
Returns the current sum.long
toString()
Returns the String representation of thesum()
.private void
Methods inherited from class com.google.common.cache.Striped64
casBase, casBusy, internalReset, retryUpdate
Methods inherited from class java.lang.Number
byteValue, shortValue
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
-
Constructor Details
-
LongAdder
public LongAdder()Creates a new adder with initial sum of zero.
-
-
Method Details
-
fn
final long fn(long v, long x) Version of plus for use in retryUpdate -
add
public void add(long x) Adds the given value.- Specified by:
add
in interfaceLongAddable
- Parameters:
x
- the value to add
-
increment
public void increment()Equivalent toadd(1)
.- Specified by:
increment
in interfaceLongAddable
-
decrement
public void decrement()Equivalent toadd(-1)
. -
sum
public long sum()Returns the current sum. The returned value is NOT an atomic snapshot; invocation in the absence of concurrent updates returns an accurate result, but concurrent updates that occur while the sum is being calculated might not be incorporated.- Specified by:
sum
in interfaceLongAddable
- Returns:
- the sum
-
reset
public void reset()Resets variables maintaining the sum to zero. This method may be a useful alternative to creating a new adder, but is only effective if there are no concurrent updates. Because this method is intrinsically racy, it should only be used when it is known that no threads are concurrently updating. -
sumThenReset
public long sumThenReset()Equivalent in effect tosum()
followed byreset()
. This method may apply for example during quiescent points between multithreaded computations. If there are updates concurrent with this method, the returned value is not guaranteed to be the final value occurring before the reset.- Returns:
- the sum
-
toString
Returns the String representation of thesum()
. -
longValue
public long longValue()Equivalent tosum()
. -
intValue
public int intValue()Returns thesum()
as anint
after a narrowing primitive conversion. -
floatValue
public float floatValue()Returns thesum()
as afloat
after a widening primitive conversion.- Specified by:
floatValue
in classNumber
-
doubleValue
public double doubleValue()Returns thesum()
as adouble
after a widening primitive conversion.- Specified by:
doubleValue
in classNumber
-
writeObject
- Throws:
IOException
-
readObject
- Throws:
IOException
ClassNotFoundException
-