public abstract class ReferenceManager<G>
extends java.lang.Object
implements java.io.Closeable
ReferenceManager
implementations for their maybeRefresh() semantics.| Constructor and Description |
|---|
ReferenceManager() |
| Modifier and Type | Method and Description |
|---|---|
G |
acquire()
Obtain the current reference.
|
protected void |
afterClose()
Called after close(), so subclass can free any resources.
|
protected void |
afterRefresh()
Called after swapReference has installed a new
instance.
|
void |
close()
Close this ReferenceManager to future
acquiring. |
protected abstract void |
decRef(G reference)
Decrement reference counting on the given reference.
|
boolean |
maybeRefresh()
You must call this, periodically, if you want that
acquire() will
return refreshed instances. |
protected abstract G |
refreshIfNeeded(G referenceToRefresh)
Refresh the given reference if needed.
|
void |
release(G reference)
Release the refernce previously obtained via
acquire(). |
protected abstract boolean |
tryIncRef(G reference)
Try to increment reference counting on the given reference.
|
protected volatile G current
protected abstract void decRef(G reference) throws java.io.IOException
java.io.IOExceptionprotected abstract G refreshIfNeeded(G referenceToRefresh) throws java.io.IOException
null if no refresh
was needed, otherwise a new refreshed reference.java.io.IOExceptionprotected abstract boolean tryIncRef(G reference)
public final G acquire()
release(G); it's best to do so in a finally clause, and set
the reference to null to prevent accidental usage after it has been
released.public final void close()
throws java.io.IOException
acquiring. Any
references that were previously acquired won't be
affected, and they should still be released when they are
not needed anymore.close in interface java.io.Closeableclose in interface java.lang.AutoCloseablejava.io.IOExceptionprotected void afterClose()
throws java.io.IOException
java.io.IOExceptionpublic final boolean maybeRefresh()
throws java.io.IOException
acquire() will
return refreshed instances.
Threads: it's fine for more than one thread to call this at once. Only the first thread will attempt the refresh; subsequent threads will see that another thread is already handling refresh and will return immediately. Note that this means if another thread is already refreshing then subsequent threads will return right away without waiting for the refresh to complete.
If this method returns true it means the calling thread either refreshed or that there were no changes to refresh. If it returns false it means another thread is currently refreshing.
java.io.IOExceptionprotected void afterRefresh()
throws java.io.IOException
java.io.IOExceptionpublic final void release(G reference) throws java.io.IOException
java.io.IOException