public abstract class AbstractResource extends Object implements SharedResource
SharedResource
interface, and should be used for
all subclasses of RequestHandler
, ClientProvider
and ServerProvider
. Once the reference count
of this resource reaches zero, the destroy()
method is called.Modifier and Type | Class and Description |
---|---|
private static class |
AbstractResource.DebugResourceReference |
private static class |
AbstractResource.NoDebugResourceReference |
Modifier and Type | Field and Description |
---|---|
private Set<Throwable> |
activeReferences |
private boolean |
debug |
private ResourceReference |
initialCreationReference |
private static Logger |
log |
private Object |
monitor |
private AtomicInteger |
refCount |
DEBUG, SYSTEM_PROPERTY_NAME_DEBUG
Modifier | Constructor and Description |
---|---|
protected |
AbstractResource() |
Modifier and Type | Method and Description |
---|---|
private int |
addRef(int value) |
String |
currentState()
Returns a string describing the current state of references in human-friendly terms.
|
private String |
currentStateDebugWithLock() |
protected void |
destroy()
This method signals that this AbstractResource can dispose of any internal resources, and commence with shut
down of any internal threads.
|
private String |
makeListOfActiveReferences() |
ResourceReference |
refer()
Increments the reference count of this resource.
|
void |
release()
Releases the "main" reference to this resource (the implicit reference due to creation of the object).
|
private void |
removeReferenceStack(Throwable referenceStack,
Throwable releaseStack) |
int |
retainCount()
Returns the reference count of this resource.
|
private static final Logger log
private final boolean debug
private final AtomicInteger refCount
private final Object monitor
private final ResourceReference initialCreationReference
public final ResourceReference refer()
SharedResource
Increments the reference count of this resource. You call this method to prevent an object from being destroyed until you have finished using it.
You MUST keep the returned ResourceReference
object and release the reference by calling
ResourceReference.close()
on it. A reference created by this method can NOT be released by calling
SharedResource.release()
.
refer
in interface SharedResource
ResourceReference.close()
public void release()
SharedResource
Releases the "main" reference to this resource (the implicit reference due to creation of the object).
References obtained by calling SharedResource.refer()
must be released by calling ResourceReference.close()
on the ResourceReference
returned from SharedResource.refer()
, NOT by calling this method. You call this
method once you are done using an object that you have previously caused instantiation of.
release
in interface SharedResource
ResourceReference
private void removeReferenceStack(Throwable referenceStack, Throwable releaseStack)
public final int retainCount()
Returns the reference count of this resource. This typically has no value for other than single-threaded unit- tests, as it is merely a snapshot of the counter.
protected void destroy()
This method signals that this AbstractResource can dispose of any internal resources, and commence with shut down of any internal threads. This will be called once the reference count of this resource reaches zero.
private int addRef(int value)
public String currentState()
private String currentStateDebugWithLock()
private String makeListOfActiveReferences()
Copyright © 2018. All rights reserved.