Interface TxnLong
- All Superinterfaces:
TxnObject
- All Known Implementing Classes:
GammaTxnLong
PropagationLevel.RequiresNew
).
For the other methods, always an txn needs to be available, else you will get the
TxnMandatoryException
.
ControlFlowError
All non atomic methods are able to throw a (subclass) of the ControlFlowError
. This error should
not be caught, it is task of the TxnExecutor
to deal with.
TransactionExecutionException
Most of the methods can throw a TxnExecutionException
.
This exception can be caught, but in most cases you want to figure out what the cause is (e.g. because
there are too many retries) and solve that problem.
Threadsafe
All methods are threadsafe.
-
Method Summary
Modifier and TypeMethodDescriptionlong
alterAndGet
(LongFunction function) Alters the value stored in this Ref using the provided function and returns the result.long
alterAndGet
(Txn txn, LongFunction function) Alters the value stored in this Ref using the provided function and lifting on the provided txn.long
atomicAlterAndGet
(LongFunction function) Atomically applies the function to the current value in this ref and returns the new value.boolean
atomicCompareAndSet
(long expectedValue, long newValue) Executes a compare and set atomically.long
Atomically gets the value.long
atomicGetAndAlter
(LongFunction function) Atomically applies the function to alter the value stored in this ref and returns the old value.long
atomicGetAndIncrement
(long amount) Atomically increments the value and returns the old value.long
atomicGetAndSet
(long newValue) Atomically sets the value and returns the previous value.long
atomicIncrementAndGet
(long amount) Atomically increments the value and returns the old value.long
atomicSet
(long newValue) Atomically sets the value and returns the new value.long
Atomically gets the value without providing any ordering guarantees.void
await
(long value) Awaits for the value to become the given value.void
await
(LongPredicate predicate) Awaits until the predicate holds.void
Awaits for the reference to become the given value.void
await
(Txn txn, LongPredicate predicate) Awaits until the predicate holds using the provided txn.void
commute
(LongFunction function) Applies the function on the ref in a commuting manner.void
commute
(Txn txn, LongFunction function) Applies the function on the ref in a commuting manner.void
Decrements the value by one.void
decrement
(long amount) Decrements the value by the given amount.void
Decrements the value by one using the provided txn.void
Decrements the value by the given amount using the provided txn.long
get()
Gets the value using the provided txn.long
Gets the value using the provided txn.long
getAndAlter
(LongFunction function) Alters the value stored in this Ref using the provided function amd returns the old value.long
getAndAlter
(Txn txn, LongFunction function) Alters the value stored in this Ref using the function and returns the old value, using the provided txn.long
getAndIncrement
(long amount) Increments the value and returns the old value.long
getAndIncrement
(Txn txn, long amount) Increments the value and returns the old value using the provided txn.long
getAndLock
(LockMode lockMode) Gets the value and applies the lock.long
getAndLock
(Txn txn, LockMode lockMode) Gets the value using the provided txn and acquired the lock with the specified LockMode.long
getAndSet
(long value) Sets the value the value and returns the new value.long
Sets the value using the provided txn.long
getAndSetAndLock
(long value, LockMode lockMode) Sets the value, acquired the Lock with the specified Lockmode and returns the previous value.long
getAndSetAndLock
(Txn txn, long value, LockMode lockMode) Sets the value and acquired the Lock with the provided LockMode.void
Increments the value by one.void
increment
(long amount) Increments the value by the given amount.void
Increments the value by one using the provided txn.void
Increments the value by the given amount using the provided txn.long
incrementAndGet
(long amount) Increments and gets the new value.long
incrementAndGet
(Txn txn, long amount) Increments and gets the new value using the provided txn.long
set
(long value) Sets the new value.long
Sets the new value using the provided txn.long
setAndLock
(long value, LockMode lockMode) Sets the new value and applies the lock.long
setAndLock
(Txn txn, long value, LockMode lockMode) Sets the new value using the provided txn.Methods inherited from interface org.multiverse.api.TxnObject
atomicToString, ensure, ensure, getLock, getStm, getVersion, toDebugString, toString, toString
-
Method Details
-
get
long get()Gets the value using the provided txn.- Returns:
- the current value.
- Throws:
TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.- See Also:
-
getAndLock
Gets the value and applies the lock. If the current lockMode already is higher than the provided lockMode the Lock is not upgraded to a higher value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
lockMode
- the LockMode applied.- Returns:
- the current value.
- Throws:
TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.- See Also:
-
get
Gets the value using the provided txn.- Parameters:
txn
- theTxn
used for this operation.- Returns:
- the value stored in the ref.
- Throws:
NullPointerException
- if txn is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
getAndLock
Gets the value using the provided txn and acquired the lock with the specified LockMode.- Parameters:
txn
- theTxn
used for this operation.lockMode
- the LockMode used- Returns:
- the value stored in the ref.
- Throws:
NullPointerException
- if txn is null or if lockMode is null. If LockMode is null and a running txn is available it will be aborted.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
set
long set(long value) Sets the new value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
value
- the new value.- Returns:
- the new value.
- Throws:
TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
setAndLock
Sets the new value and applies the lock.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
value
- the new value.lockMode
- the used LockMode.- Returns:
- the new value.
- Throws:
NullPointerException
- if lockMode is null (if the txn is alive, it will also be aborted.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
set
Sets the new value using the provided txn.- Parameters:
txn
- theTxn
used for this operation.value
- the new value- Returns:
- the old value
- Throws:
NullPointerException
- if txn is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
setAndLock
Sets the new value using the provided txn.- Parameters:
txn
- theTxn
used for this operation.value
- the new valuelockMode
- the lockMode used.- Returns:
- the old value
- Throws:
NullPointerException
- if txn is null or lockMode is null. If the lockMode is null and the txn is alive, it will be aborted.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
getAndSet
long getAndSet(long value) Sets the value the value and returns the new value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
value
- the new value.- Returns:
- the old value.
- Throws:
TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
getAndSetAndLock
Sets the value, acquired the Lock with the specified Lockmode and returns the previous value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
value
- the new value.lockMode
- the LockMode used.- Returns:
- the old value.
- Throws:
NullPointerException
- if LockMode is null. If a running txn is available, it will be aborted.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
getAndSet
Sets the value using the provided txn.- Parameters:
txn
- theTxn
used for this operation.value
- the new value.- Returns:
- the old value.
- Throws:
NullPointerException
- if txn is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
getAndSetAndLock
Sets the value and acquired the Lock with the provided LockMode.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
txn
- theTxn
used for this operation.value
- the new value.lockMode
- the LockMode used.- Returns:
- the old value.
- Throws:
NullPointerException
- if txn or LockMode is null. If the txn is running, and the LockMode is null, it will be aborted.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
atomicGet
long atomicGet()Atomically gets the value. The value could be stale as soon as it is returned. This method doesn't care about any running txns. It could be that this call fails e.g. when a ref is locked. If you don't care about correct orderings, see theatomicWeakGet()
.- Returns:
- the current value.
- Throws:
TxnExecutionException
-
atomicWeakGet
long atomicWeakGet()Atomically gets the value without providing any ordering guarantees. This method is extremely cheap and will never fail. So even if the ref is privatized, this call will still complete.It is the best method to call if you just want to get the current value stored.
- Returns:
- the value.
-
atomicSet
long atomicSet(long newValue) Atomically sets the value and returns the new value. This method doesn't care about any running txns.- Parameters:
newValue
- the new value.- Returns:
- the new value.
- Throws:
TxnExecutionException
-
atomicGetAndSet
long atomicGetAndSet(long newValue) Atomically sets the value and returns the previous value. This method doesn't care about any running txns.- Parameters:
newValue
- the new value.- Returns:
- the old value.
- Throws:
TxnExecutionException
-
commute
Applies the function on the ref in a commuting manner. So if there are no dependencies, the function will commute. If somehow there already is a dependency or a dependency is formed on the result of the commuting function, the function will not commute and will be exactly the same as an alter.This is different than the behavior in Clojure where the commute will be re-applied at the end of the txn, even though some dependency is introduced, which can lead to inconsistencies.
This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
function
- the function to apply to this reference.- Throws:
NullPointerException
- if function is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
commute
Applies the function on the ref in a commuting manner. So if there are no dependencies, the function will commute. If somehow there already is a dependency or a dependency is formed on the result of the commuting function, the function will not commute and will be exactly the same as an alter.This is different than the behavior in Clojure where the commute will be re-applied at the end of the txn, even though some dependency is introduced, which can lead to inconsistencies.
This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
txn
- theTxn
used for this operation.function
- the function to apply to this reference.- Throws:
NullPointerException
- if function is null. If there is an active txn, it will be aborted.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
atomicAlterAndGet
Atomically applies the function to the current value in this ref and returns the new value. This method doesn't care about any running txns.- Parameters:
function
- the Function used- Returns:
- the new value.
- Throws:
NullPointerException
- if function is null.
-
alterAndGet
Alters the value stored in this Ref using the provided function and returns the result.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
function
- the function that alters the value stored in this Ref.- Returns:
- the new value.
- Throws:
NullPointerException
- if function is null. The Txn will also be aborted.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
alterAndGet
Alters the value stored in this Ref using the provided function and lifting on the provided txn.- Parameters:
txn
- theTxn
used for this operation.function
- the function that alters the value stored in this Ref.- Returns:
- the new value.
- Throws:
NullPointerException
- if function or txn is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
atomicGetAndAlter
Atomically applies the function to alter the value stored in this ref and returns the old value. This method doesn't care about any running txns.- Parameters:
function
- the Function used- Returns:
- the old value.
- Throws:
NullPointerException
- if function is null.TxnExecutionException
-
getAndAlter
Alters the value stored in this Ref using the provided function amd returns the old value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
function
- the function that alters the value stored in this Ref.- Returns:
- the old value.
- Throws:
NullPointerException
- if function is null. The txn will be aborted as well.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
getAndAlter
Alters the value stored in this Ref using the function and returns the old value, using the provided txn.- Parameters:
txn
- theTxn
used for this operation.function
- the function that alters the value stored in this Ref.- Returns:
- the old value
- Throws:
NullPointerException
- if function or txn is null. The txn will be aborted as well.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
atomicCompareAndSet
boolean atomicCompareAndSet(long expectedValue, long newValue) Executes a compare and set atomically. This method doesn't care about any running txns.- Parameters:
expectedValue
- the expected value.newValue
- the new value.- Returns:
- true if the compareAndSwap was a success, false otherwise.
- Throws:
TxnExecutionException
-
atomicGetAndIncrement
long atomicGetAndIncrement(long amount) Atomically increments the value and returns the old value. This method doesn't care about any running txns.- Parameters:
amount
- the amount to increase with.- Returns:
- the old value.
- Throws:
TxnExecutionException
-
getAndIncrement
long getAndIncrement(long amount) Increments the value and returns the old value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
amount
- the amount to increment with.- Returns:
- the old value.
- Throws:
TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
getAndIncrement
Increments the value and returns the old value using the provided txn.- Parameters:
txn
- theTxn
used for this operation.amount
- the amount to increment with.- Returns:
- the old value.
- Throws:
NullPointerException
- if txn is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
atomicIncrementAndGet
long atomicIncrementAndGet(long amount) Atomically increments the value and returns the old value. This method doesn't care about any running txns.- Parameters:
amount
- the amount to increment with.- Returns:
- the new value.
- Throws:
TxnExecutionException
-
incrementAndGet
long incrementAndGet(long amount) Increments and gets the new value.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
amount
- the amount to increment with.- Returns:
- the new value.
- Throws:
TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
incrementAndGet
Increments and gets the new value using the provided txn.- Parameters:
txn
- theTxn
used for this operation.amount
- the amount to increment with.- Returns:
- the new value.
- Throws:
NullPointerException
- if txn is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
increment
void increment()Increments the value by one.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
This call lifts on the
Txn
stored in theTxnThreadLocal
.- Throws:
TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
increment
Increments the value by one using the provided txn.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
- Parameters:
txn
- theTxn
used for this operation.- Throws:
NullPointerException
- if txn is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
increment
void increment(long amount) Increments the value by the given amount.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
amount
- the amount to increase with- Throws:
TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.ControlFlowError
-
increment
Increments the value by the given amount using the provided txn.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
- Parameters:
txn
- theTxn
used for this operation.amount
- the amount to increment with- Throws:
NullPointerException
- if txn is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
decrement
void decrement()Decrements the value by one.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
This call lifts on the
Txn
stored in theTxnThreadLocal
.- Throws:
TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
decrement
Decrements the value by one using the provided txn.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
- Parameters:
txn
- theTxn
used for this operation.- Throws:
NullPointerException
- if txn is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
decrement
void decrement(long amount) Decrements the value by the given amount.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
amount
- the amount to decrement with- Throws:
TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
decrement
Decrements the value by the given amount using the provided txn.This call is able to commute if there are no dependencies on the value in the txn. That is why this method doesn't have a return value.
- Parameters:
txn
- theTxn
used for this operation.amount
- the amount to decrement with- Throws:
NullPointerException
- if txn is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
await
void await(long value) Awaits for the value to become the given value. If the value already has the the specified value, the call continues, else a retry is done.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
value
- the value to wait for.- Throws:
TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
await
Awaits for the reference to become the given value. If the value already has the the specified value, the call continues, else a retry is done.- Parameters:
txn
- theTxn
used for this operation.value
- the value to wait for.- Throws:
NullPointerException
- if txn is null.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
await
Awaits until the predicate holds. If the value already evaluates to true, the call continues else a retry is done. If the predicate throws an exception, the txn is aborted and the throwable is propagated.This call lifts on the
Txn
stored in theTxnThreadLocal
.- Parameters:
predicate
- the predicate to evaluate.- Throws:
NullPointerException
- if predicate is null. When there is a non dead txn, it will be aborted.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-
await
Awaits until the predicate holds using the provided txn. If the value already evaluates to true, the call continues else a retry is done. If the predicate throws an exception, the txn is aborted and the throwable is propagated.- Parameters:
txn
- theTxn
used for this operation.predicate
- the predicate to evaluate.- Throws:
NullPointerException
- if predicate is null or txn is null. When there is a non dead txn, it will be aborted.TxnExecutionException
- if something failed while using the txn. The txn is guaranteed to have been aborted.ControlFlowError
- if the Stm needs to control the flow in a different way than normal returns of exceptions. The txn is guaranteed to have been aborted.
-