Class AtomicLongMap<K>
- All Implemented Interfaces:
Serializable
long
values that can be atomically updated. While writes to a
traditional Map
rely on put(K, V)
, the typical mechanism for writing to this map
is addAndGet(K, long)
, which adds a long
to the value currently associated with
K
. If a key has not yet been associated with a value, its implicit value is zero.
Most methods in this class treat absent values and zero values identically, as individually
documented. Exceptions to this are containsKey(java.lang.Object)
, size()
, isEmpty()
, asMap
, and toString()
.
Instances of this class may be used by multiple threads concurrently. All operations are atomic unless otherwise noted.
Instances of this class are serializable if the keys are serializable.
Note: If your values are always positive and less than 2^31, you may wish to use a
Multiset
such as ConcurrentHashMultiset
instead.
Warning: Unlike Multiset
, entries whose values are zero are not automatically
removed from the map. Instead they must be removed manually with removeAllZeros()
.
- Since:
- 11.0
- Author:
- Charles Fry
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionlong
accumulateAndGet
(K key, long x, LongBinaryOperator accumulatorFunction) Updates the value currently associated withkey
by combining it withx
via the specified accumulator function, returning the new value.long
Addsdelta
to the value currently associated withkey
, and returns the new value.asMap()
Returns a live, read-only view of the map backing thisAtomicLongMap
.void
clear()
Removes all of the mappings from this map.boolean
containsKey
(Object key) Returns true if this map contains a mapping for the specified key.static <K> AtomicLongMap
<K> create()
Creates anAtomicLongMap
.static <K> AtomicLongMap
<K> Creates anAtomicLongMap
with the same mappings as the specifiedMap
.long
decrementAndGet
(K key) Decrements by one the value currently associated withkey
, and returns the new value.long
Returns the value associated withkey
, or zero if there is no value associated withkey
.long
getAndAccumulate
(K key, long x, LongBinaryOperator accumulatorFunction) Updates the value currently associated withkey
by combining it withx
via the specified accumulator function, returning the old value.long
Addsdelta
to the value currently associated withkey
, and returns the old value.long
getAndDecrement
(K key) Decrements by one the value currently associated withkey
, and returns the old value.long
getAndIncrement
(K key) Increments by one the value currently associated withkey
, and returns the old value.long
getAndUpdate
(K key, LongUnaryOperator updaterFunction) Updates the value currently associated withkey
with the specified function, and returns the old value.long
incrementAndGet
(K key) Increments by one the value currently associated withkey
, and returns the new value.boolean
isEmpty()
Returnstrue
if this map contains no key-value mappings.long
AssociatesnewValue
withkey
in this map, and returns the value previously associated withkey
, or zero if there was no such value.void
Copies all of the mappings from the specified map to this map.long
Removes and returns the value associated withkey
.void
Removes all mappings from this map whose values are zero.boolean
removeIfZero
(K key) Atomically removekey
from the map iff its associated value is 0.int
size()
Returns the number of key-value mappings in this map.long
sum()
Returns the sum of all values in this map.toString()
long
updateAndGet
(K key, LongUnaryOperator updaterFunction) Updates the value currently associated withkey
with the specified function, and returns the new value.
-
Method Details
-
create
Creates anAtomicLongMap
. -
create
Creates anAtomicLongMap
with the same mappings as the specifiedMap
. -
get
-
incrementAndGet
Increments by one the value currently associated withkey
, and returns the new value. -
decrementAndGet
Decrements by one the value currently associated withkey
, and returns the new value. -
addAndGet
Addsdelta
to the value currently associated withkey
, and returns the new value. -
getAndIncrement
Increments by one the value currently associated withkey
, and returns the old value. -
getAndDecrement
Decrements by one the value currently associated withkey
, and returns the old value. -
getAndAdd
Addsdelta
to the value currently associated withkey
, and returns the old value. -
updateAndGet
Updates the value currently associated withkey
with the specified function, and returns the new value. If there is not currently a value associated withkey
, the function is applied to0L
.- Since:
- 21.0
-
getAndUpdate
Updates the value currently associated withkey
with the specified function, and returns the old value. If there is not currently a value associated withkey
, the function is applied to0L
.- Since:
- 21.0
-
accumulateAndGet
@CanIgnoreReturnValue public long accumulateAndGet(K key, long x, LongBinaryOperator accumulatorFunction) Updates the value currently associated withkey
by combining it withx
via the specified accumulator function, returning the new value. The previous value associated withkey
(or zero, if there is none) is passed as the first argument toaccumulatorFunction
, andx
is passed as the second argument.- Since:
- 21.0
-
getAndAccumulate
@CanIgnoreReturnValue public long getAndAccumulate(K key, long x, LongBinaryOperator accumulatorFunction) Updates the value currently associated withkey
by combining it withx
via the specified accumulator function, returning the old value. The previous value associated withkey
(or zero, if there is none) is passed as the first argument toaccumulatorFunction
, andx
is passed as the second argument.- Since:
- 21.0
-
put
AssociatesnewValue
withkey
in this map, and returns the value previously associated withkey
, or zero if there was no such value. -
putAll
Copies all of the mappings from the specified map to this map. The effect of this call is equivalent to that of callingput(k, v)
on this map once for each mapping from keyk
to valuev
in the specified map. The behavior of this operation is undefined if the specified map is modified while the operation is in progress. -
remove
Removes and returns the value associated withkey
. Ifkey
is not in the map, this method has no effect and returns zero. -
removeIfZero
Atomically removekey
from the map iff its associated value is 0.- Since:
- 20.0
-
removeAllZeros
Removes all mappings from this map whose values are zero.This method is not atomic: the map may be visible in intermediate states, where some of the zero values have been removed and others have not.
-
sum
Returns the sum of all values in this map.This method is not atomic: the sum may or may not include other concurrent operations.
-
asMap
-
containsKey
Returns true if this map contains a mapping for the specified key. -
size
Returns the number of key-value mappings in this map. If the map contains more thanInteger.MAX_VALUE
elements, returnsInteger.MAX_VALUE
. -
isEmpty
Returnstrue
if this map contains no key-value mappings. -
clear
Removes all of the mappings from this map. The map will be empty after this call returns.This method is not atomic: the map may not be empty after returning if there were concurrent writes.
-
toString
-