T - the type of the contained element.@ThreadSafe public abstract class ResettableLazyReference<T> extends Object implements Supplier<T>
get()
will be the one that creates it.
Usage: clients need to implement the create() method to return the
object this reference will hold.
For instance:
final ResettableLazyReference<MyObject> ref = new ResettableLazyReference() {
protected MyObject create() throws Exception {
// Do expensive object construction here
return new MyObject();
}
};
Then call get() to get a reference to the referenced object:
MyObject myLazyLoadedObject = ref.get()NOTE: Interruption policy is that if you want to be cancellable while waiting for another thread to create the value, instead of calling
get()
call getInterruptibly(). However, If your create() method
is interrupted and throws an InterruptedException, it is
treated as an application exception and will be the causal exception inside
the runtime
LazyReference.InitializationException
that get() or getInterruptibly() throws and your
create() will not be called again.| Constructor and Description |
|---|
ResettableLazyReference() |
| Modifier and Type | Method and Description |
|---|---|
void |
cancel()
Cancel the initializing operation if it has not already run.
|
protected abstract T |
create()
The object factory method, guaranteed to be called once and only once.
|
T |
get()
Get the lazily loaded reference in a non-cancellable manner.
|
T |
getInterruptibly()
Get the lazily loaded reference in a cancellable manner.
|
boolean |
isInitialized()
Has the
create() reference been initialized. |
protected void |
onReset(LazyReference<T> oldValue)
Template extension method for providing custom reset behavior.
|
void |
reset()
Reset the internal reference.
|
LazyReference<T> |
resets()
Reset the internal reference and returns a LazyReference of the old value.
|
protected abstract T create() throws Exception
get() and getInterruptibly() will
return.Exception - if anything goes wrong, rethrown as an
Initializationjava.lang.Exception from get() and
getInterruptibly()public final T get()
create() method throws an Exception calls to
get() will throw an InitializationException which wraps the
previously thrown exception.get in interface Supplier<T>create() created.LazyReference.InitializationException - if the create() method throws an
exception. The
Throwable.getCause()
will contain the exception thrown by the create() methodpublic final T getInterruptibly() throws InterruptedException
create() method throws an Exception, calls to
get() will throw a RuntimeException which wraps the previously
thrown exception.create() created.LazyReference.InitializationException - if the create() method throws an
exception. The
Throwable.getCause()
will contain the exception thrown by the create() methodInterruptedException - If the calling thread is Interrupted
while waiting for another thread to create the value (if the creating
thread is interrupted while blocking on something, the
InterruptedException will be thrown as the causal
exception of the
LazyReference.InitializationException
to everybody calling this method).public final void reset()
get() will still force that and receive the old reference.
Note: this method was made final in 3.0. Override
onReset(LazyReference) to implement custom reset behavior.public final LazyReference<T> resets()
get() will still force
that and receive the old reference however.protected void onReset(LazyReference<T> oldValue)
oldValue - the old LazyReference, guaranteed that nobody else has
access to it anymore.public final boolean isInitialized()
create() reference been initialized.public final void cancel()
Copyright © 2016 Atlassian. All rights reserved.