Package net.schmizz.concurrent
Class Promise<V,T extends Throwable>
java.lang.Object
net.schmizz.concurrent.Promise<V,T>
Represents promised data of the parameterized type
V
and allows waiting on it. An exception may also be
delivered to a waiter, and will be of the parameterized type T
.
For atomic operations on a promise, e.g. checking if a value is delivered and if it is not then setting it, the
associated lock for the promise should be acquired while doing so.-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionPromise
(String name, ExceptionChainer<T> chainer, ReentrantLock lock, LoggerFactory loggerFactory) Creates this promise with givenname
, exceptionchainer
, and associatedlock
.Promise
(String name, ExceptionChainer<T> chainer, LoggerFactory loggerFactory) Creates this promise with givenname
and exceptionchainer
. -
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Clears this promise by setting its value and queued exception tonull
.void
Set this promise's value toval
.void
Queues error that will be thrown in any waiting thread or any thread that attempts to wait on this promise hereafter.boolean
boolean
inError()
boolean
boolean
void
lock()
Acquire the lock associated with this promise.retrieve()
Wait indefinitely for this promise's value to be deliver.Wait fortimeout
duration for this promise's value to be deliver.toString()
tryRetrieve
(long timeout, TimeUnit unit) Wait fortimeout
duration for this promise's value to be deliver.void
unlock()
Release the lock associated with this promise.
-
Field Details
-
log
private final org.slf4j.Logger log -
name
-
chainer
-
lock
-
cond
-
val
-
pendingEx
-
-
Constructor Details
-
Promise
Creates this promise with givenname
and exceptionchainer
. Allocates a newlock
object for this promise.- Parameters:
name
- name of this promisechainer
-ExceptionChainer
that will be used for chaining exceptions
-
Promise
public Promise(String name, ExceptionChainer<T> chainer, ReentrantLock lock, LoggerFactory loggerFactory) Creates this promise with givenname
, exceptionchainer
, and associatedlock
.- Parameters:
name
- name of this promisechainer
-ExceptionChainer
that will be used for chaining exceptionslock
- lock to use
-
-
Method Details
-
deliver
Set this promise's value toval
. Any waiters will be delivered this value.- Parameters:
val
- the value
-
deliverError
Queues error that will be thrown in any waiting thread or any thread that attempts to wait on this promise hereafter.- Parameters:
e
- the error
-
clear
public void clear()Clears this promise by setting its value and queued exception tonull
. -
retrieve
Wait indefinitely for this promise's value to be deliver.- Returns:
- the value
- Throws:
T
- in case another thread informs the promise of an error meanwhile
-
retrieve
Wait fortimeout
duration for this promise's value to be deliver.- Parameters:
timeout
- the timeoutunit
- time unit for the timeout- Returns:
- the value
- Throws:
T
- in case another thread informs the promise of an error meanwhile, or the timeout expires
-
tryRetrieve
Wait fortimeout
duration for this promise's value to be deliver. If the value is not deliver by the time the timeout expires, returnsnull
.- Parameters:
timeout
- the timeoutunit
- time unit for the timeout- Returns:
- the value or
null
- Throws:
T
- in case another thread informs the promise of an error meanwhile
-
isDelivered
public boolean isDelivered()- Returns:
- whether this promise has a value delivered, and no error waiting to pop.
-
inError
public boolean inError()- Returns:
- whether this promise has been delivered an error.
-
isFulfilled
public boolean isFulfilled()- Returns:
- whether this promise was fulfilled with either a value or an error.
-
hasWaiters
public boolean hasWaiters()- Returns:
- whether this promise has threads waiting on it.
-
lock
public void lock()Acquire the lock associated with this promise. -
unlock
public void unlock()Release the lock associated with this promise. -
toString
-