public abstract class AbstractReferenceCounted extends Object implements ReferenceCountedTracer, ReferenceOwner, SingleThreadedChecked
Modifier and Type | Field and Description |
---|---|
protected MonitorReferenceCounted |
referenceCounted |
protected static int |
WARN_COUNT |
protected static long |
WARN_NS |
INIT, TMP
DISABLE_SINGLE_THREADED_CHECK
Modifier | Constructor and Description |
---|---|
protected |
AbstractReferenceCounted() |
protected |
AbstractReferenceCounted(boolean monitored) |
Modifier and Type | Method and Description |
---|---|
void |
addReferenceChangeListener(ReferenceChangeListener referenceChangeListener)
Add a
ReferenceChangeListener that will be notified whenever the set of references changes |
static void |
assertReferencesReleased() |
protected void |
backgroundPerformRelease() |
protected boolean |
canReleaseInBackground() |
void |
clearUsedByThread()
Deprecated.
Use singleThreadedCheckReset() instead
|
StackTrace |
createdHere() |
static void |
disableReferenceTracing() |
static void |
enableReferenceTracing() |
protected abstract void |
performRelease() |
int |
refCount()
Returns the reference count for this resource.
|
int |
referenceId() |
void |
release(ReferenceOwner id)
Releases a resource.
|
void |
releaseLast(ReferenceOwner id)
Releases a resource and checks this is the last usage.
|
void |
removeReferenceChangeListener(ReferenceChangeListener referenceChangeListener)
Remove a
ReferenceChangeListener |
void |
reserve(ReferenceOwner id)
Reserves a resource or throws an Exception.
|
boolean |
reservedBy(ReferenceOwner owner)
Deprecated.
|
void |
reserveTransfer(ReferenceOwner from,
ReferenceOwner to) |
void |
singleThreadedCheckDisabled(boolean singleThreadedCheckDisabled)
When set to
true this resource can be shared between thread provided you ensure they used in a thread safe manner. |
void |
singleThreadedCheckReset()
Forget about previous accesses and only check from now on.
|
protected boolean |
threadSafetyCheck(boolean isUsed) |
void |
throwExceptionIfNotReleased() |
void |
throwExceptionIfReleased() |
@NotNull String |
toString() |
boolean |
tryReserve(ReferenceOwner id)
Tries to reserve a resource and returns if the resource could
be successfully reserved.
|
static void |
unmonitor(ReferenceCounted counted) |
void |
warnAndReleaseIfNotReleased()
Release any remaining references, and log a warning if there were any references to release.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
onReleased
releaseLast
referenceName, temporary
protected static final long WARN_NS
protected static final int WARN_COUNT
protected final transient MonitorReferenceCounted referenceCounted
protected AbstractReferenceCounted()
protected AbstractReferenceCounted(boolean monitored)
public static void enableReferenceTracing()
public static void disableReferenceTracing()
public static void assertReferencesReleased()
public static void unmonitor(ReferenceCounted counted)
public int referenceId()
referenceId
in interface ReferenceOwner
public StackTrace createdHere()
createdHere
in interface ReferenceCountedTracer
public void throwExceptionIfNotReleased() throws IllegalStateException
throwExceptionIfNotReleased
in interface ReferenceCountedTracer
IllegalStateException
protected void backgroundPerformRelease()
protected boolean canReleaseInBackground()
protected abstract void performRelease() throws IllegalStateException
IllegalStateException
public void reserve(ReferenceOwner id) throws IllegalStateException
ReferenceCounted
Each invocation of this method increases the reference count by one.
reserve
in interface ReferenceCounted
id
- unique id for this reserveIllegalStateException
- if the resource has already been freed.
I.e. its reference counter has as some point reached zero.public void release(ReferenceOwner id) throws IllegalStateException
ReferenceCounted
Each invocation of this method decreases the reference count by one.
release
in interface ReferenceCounted
id
- unique id for the reserve to be releasedIllegalStateException
- if the resource has already been freed.
I.e. its reference counter has as some point reached zero.public void releaseLast(ReferenceOwner id) throws IllegalStateException
ReferenceCounted
Each invocation of this method decreases the reference count by one.
releaseLast
in interface ReferenceCounted
id
- unique id for the reserve to be releasedIllegalStateException
- if the resource has already been freed.
I.e. its reference counter has as some point reached zero.public boolean tryReserve(ReferenceOwner id) throws IllegalStateException, IllegalArgumentException
ReferenceCounted
Each invocation of this method increases the reference count by one.
tryReserve
in interface ReferenceCounted
id
- unique id for this reserveIllegalStateException
- if the resource has already been freed.
I.e. its reference counter has as some point reached zero.IllegalArgumentException
public void reserveTransfer(ReferenceOwner from, ReferenceOwner to) throws IllegalStateException
reserveTransfer
in interface ReferenceCounted
IllegalStateException
public int refCount()
ReferenceCounted
refCount
in interface ReferenceCounted
public void throwExceptionIfReleased() throws ClosedIllegalStateException
throwExceptionIfReleased
in interface ReferenceCountedTracer
ClosedIllegalStateException
public void warnAndReleaseIfNotReleased() throws ClosedIllegalStateException
ReferenceCountedTracer
Intended to be called by a finalizer or in a test, to confirm that references are being released correctly
Note: This will not cause any ReferenceChangeListener
s to fire as it's really just a sanity check
warnAndReleaseIfNotReleased
in interface ReferenceCountedTracer
ClosedIllegalStateException
@Deprecated public boolean reservedBy(ReferenceOwner owner) throws IllegalStateException
ReferenceCounted
true
if not sure.reservedBy
in interface ReferenceCounted
owner
- to checkIllegalStateException
public void singleThreadedCheckDisabled(boolean singleThreadedCheckDisabled)
SingleThreadedChecked
true
this resource can be shared between thread provided you ensure they used in a thread safe manner.singleThreadedCheckDisabled
in interface SingleThreadedChecked
singleThreadedCheckDisabled
- true to turn off the thread safety checkpublic void addReferenceChangeListener(ReferenceChangeListener referenceChangeListener)
ReferenceCounted
ReferenceChangeListener
that will be notified whenever the set of references changesaddReferenceChangeListener
in interface ReferenceCounted
referenceChangeListener
- The listener to addpublic void removeReferenceChangeListener(ReferenceChangeListener referenceChangeListener)
ReferenceCounted
ReferenceChangeListener
Uses object equality to determine which to remove so be careful if the listener implements equals
removeReferenceChangeListener
in interface ReferenceCounted
referenceChangeListener
- The listener to removeprotected boolean threadSafetyCheck(boolean isUsed) throws IllegalStateException
IllegalStateException
public void singleThreadedCheckReset()
SingleThreadedChecked
singleThreadedCheckReset
in interface SingleThreadedChecked
@Deprecated public void clearUsedByThread()
Copyright © 2023. All rights reserved.