|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.atlassian.util.concurrent.ResettableLazyReference<T>
@ThreadSafe public abstract class ResettableLazyReference<T>
Lazily loaded reference that is not constructed until required. This class is
used to maintain a reference to an object that is expensive to create, but
may need to be reset and recomputed at a later time. Object creation is
guaranteed to be thread-safe and the first thread that calls 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 Summary | |
---|---|
ResettableLazyReference()
|
Method Summary | |
---|---|
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. |
void |
reset()
Reset the internal reference. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public ResettableLazyReference()
Method Detail |
---|
protected abstract T create() throws java.lang.Exception
get()
and getInterruptibly()
will return.
java.lang.Exception
- if anything goes wrong, rethrown as an
InitializationException from get()
and
getInterruptibly()
public 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 java.lang.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()
method
java.lang.InterruptedException
- 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 void reset()
public boolean isInitialized()
create()
reference been initialized.
public void cancel()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |