Package org.agrona.concurrent.status
Class AtomicCounter
java.lang.Object
org.agrona.concurrent.status.AtomicCounter
- All Implemented Interfaces:
AutoCloseable
Atomic counter that is backed by an
AtomicBuffer that can be read across threads and processes.-
Constructor Summary
ConstructorsConstructorDescriptionAtomicCounter(AtomicBuffer buffer, int counterId) Map a counter over a buffer.AtomicCounter(AtomicBuffer buffer, int counterId, CountersManager countersManager) Map a counter over a buffer. -
Method Summary
Modifier and TypeMethodDescriptionappendToLabel(String suffix) Append to the label for a counter constructed with aCountersManager.voidclose()Close counter and free the counter slot for reuse of connected toCountersManager.booleancompareAndSet(long expectedValue, long updateValue) Compare the current value to expected and if true then set to the update value atomically.longPerform an atomic decrement that will not lose updates across threads.longPerform an atomic decrement that is not safe across threads.voidDisconnect fromCountersManagerif allocated, so it can be closed without freeing the slot.longget()Get the latest value for the counter with volatile semantics.longgetAndAdd(long increment) Add an increment to the counter that will not lose updates across threads.longgetAndAddOrdered(long increment) Add an increment to the counter with ordered store semantics.longgetAndSet(long value) Get the current value of a counter and atomically set it to a new value.longgetWeak()Get the value of the counter using weak ordering semantics.intid()Identity for the counter within theCountersManager.longPerform an atomic increment that will not lose updates across threads.longPerform an atomic increment that is not safe across threads.booleanisClosed()Has this counter been closed?label()Return the label for the counter within theCountersManager.booleanproposeMax(long proposedValue) Set the value to a new proposedValue if greater than the current value with memory ordering semantics.booleanproposeMaxOrdered(long proposedValue) Set the value to a new proposedValue if greater than the current value with memory ordering semantics.voidset(long value) Set the counter with volatile semantics.voidsetOrdered(long value) Set the counter with ordered semantics.voidsetWeak(long value) Set the counter with normal semantics.toString()voidupdateKey(Consumer<MutableDirectBuffer> keyFunc) Update the key for a counter constructed with aCountersManager.voidupdateKey(DirectBuffer keyBuffer, int offset, int length) Update the key for a counter constructed with aCountersManager.voidupdateLabel(String newLabel) Update the label for the counter constructed with aCountersManager.
-
Constructor Details
-
AtomicCounter
Map a counter over a buffer. This version will NOT free the counter on close.- Parameters:
buffer- containing the counter.counterId- identifier of the counter.
-
AtomicCounter
Map a counter over a buffer. This version will free the counter on close.- Parameters:
buffer- containing the counter.counterId- identifier for the counter.countersManager- to be called to free the counter on close.
-
-
Method Details
-
id
public int id()Identity for the counter within theCountersManager.- Returns:
- identity for the counter within the
CountersManager.
-
disconnectCountersManager
public void disconnectCountersManager()Disconnect fromCountersManagerif allocated, so it can be closed without freeing the slot. -
close
public void close()Close counter and free the counter slot for reuse of connected toCountersManager.- Specified by:
closein interfaceAutoCloseable
-
isClosed
public boolean isClosed()Has this counter been closed?- Returns:
- true if this counter has already been closed.
-
label
Return the label for the counter within theCountersManager.- Returns:
- the label for the counter within the
CountersManager.
-
updateLabel
Update the label for the counter constructed with aCountersManager.- Parameters:
newLabel- for the counter with aCountersManager.- Throws:
IllegalStateException- is not constructedCountersManager.
-
appendToLabel
Append to the label for a counter constructed with aCountersManager.- Parameters:
suffix- for the counter within aCountersManager.- Returns:
- this for a fluent API.
- Throws:
IllegalStateException- is not constructedCountersManager.
-
updateKey
Update the key for a counter constructed with aCountersManager.- Parameters:
keyFunc- callback to use to update the counter's key- Throws:
IllegalStateException- is not constructedCountersManager.
-
updateKey
Update the key for a counter constructed with aCountersManager.- Parameters:
keyBuffer- contains key data to be copied into the counter.offset- start of the key data within the keyBufferlength- length of the data within the keyBuffer (must be <=CountersReader.MAX_KEY_LENGTH)- Throws:
IllegalStateException- is not constructedCountersManager.
-
increment
public long increment()Perform an atomic increment that will not lose updates across threads.- Returns:
- the previous value of the counter
-
incrementOrdered
public long incrementOrdered()Perform an atomic increment that is not safe across threads.- Returns:
- the previous value of the counter
-
decrement
public long decrement()Perform an atomic decrement that will not lose updates across threads.- Returns:
- the previous value of the counter
-
decrementOrdered
public long decrementOrdered()Perform an atomic decrement that is not safe across threads.- Returns:
- the previous value of the counter
-
set
public void set(long value) Set the counter with volatile semantics.- Parameters:
value- to be set with volatile semantics.
-
setOrdered
public void setOrdered(long value) Set the counter with ordered semantics.- Parameters:
value- to be set with ordered semantics.
-
setWeak
public void setWeak(long value) Set the counter with normal semantics.- Parameters:
value- to be set with normal semantics.
-
getAndAdd
public long getAndAdd(long increment) Add an increment to the counter that will not lose updates across threads.- Parameters:
increment- to be added.- Returns:
- the previous value of the counter
-
getAndAddOrdered
public long getAndAddOrdered(long increment) Add an increment to the counter with ordered store semantics.- Parameters:
increment- to be added with ordered store semantics.- Returns:
- the previous value of the counter
-
getAndSet
public long getAndSet(long value) Get the current value of a counter and atomically set it to a new value.- Parameters:
value- to be set.- Returns:
- the previous value of the counter
-
compareAndSet
public boolean compareAndSet(long expectedValue, long updateValue) Compare the current value to expected and if true then set to the update value atomically.- Parameters:
expectedValue- for the counter.updateValue- for the counter.- Returns:
- true if successful otherwise false.
-
get
public long get()Get the latest value for the counter with volatile semantics.- Returns:
- the latest value for the counter.
-
getWeak
public long getWeak()Get the value of the counter using weak ordering semantics. This is the same a standard read of a field.- Returns:
- the value for the counter.
-
proposeMax
public boolean proposeMax(long proposedValue) Set the value to a new proposedValue if greater than the current value with memory ordering semantics.- Parameters:
proposedValue- for the new max.- Returns:
- true if a new max as been set otherwise false.
-
proposeMaxOrdered
public boolean proposeMaxOrdered(long proposedValue) Set the value to a new proposedValue if greater than the current value with memory ordering semantics.- Parameters:
proposedValue- for the new max.- Returns:
- true if a new max as been set otherwise false.
-
toString
-