Package org.aksw.commons.util.ref
Class RefImpl<T>
java.lang.Object
org.aksw.commons.util.ref.RefImpl<T>
- Type Parameters:
T-
- All Implemented Interfaces:
AutoCloseable,Ref<T>
Implementation of a
Ref
TODO Avoid needless synchronization; a ConcurrentHashMap may help;
ref.equals could do only reference comparison- Author:
- raven
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected StackTraceElement[]protected intprotected StackTraceElement[]protected StackTraceElement[]protected Objectprotected booleanprotected AutoCloseableThe release action is run once immediately when the isAlive() state changes to false.protected ObjectObject on which to synchronize on before any change of state of this reference.protected booleanprotected T -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionAcquire a new reference with a given comment object Acquiration fails if isAlive() returns falseprotected voidvoidclose()static <T> Ref<T>create(T value, Object synchronizer, AutoCloseable releaseAction) static <T> Ref<T>create(T value, Object synchronizer, AutoCloseable releaseAction, Object comment) static <T> Ref<T>Create method where the close action is created from a provided lambda that accepts the valuestatic <T> Ref<T>protected voidfinalize()TODO Switch to Java 9 Cleaner once we upgradestatic <T extends AutoCloseable>
Ref<T>fromCloseable(T value, Object synchronizer) get()Get the referent only iff this ref instance has not yet been closed.Optional operation.Get the root referenceReturn the object on which reference acquisition, release and the close action are synchronized on.booleanisAlive()A reference may itself be closed, but references to it may keep it alivebooleanisClosed()Check whether this reference is closedprotected voidtoString()Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.aksw.commons.util.ref.Ref
acquire, acquireMapped
-
Field Details
-
traceAcquisitions
protected boolean traceAcquisitions -
value
-
releaseAction
The release action is run once immediately when the isAlive() state changes to false. The release action cannot 'revive' a reference as the reference is already 'dead'. The release action differs depending on how a reference was created: On the root reference, the releaseAction releases the wrapped resource On a child reference, the releaseAction releases itself (the child) from the parent one. -
synchronizer
Object on which to synchronize on before any change of state of this reference. This allows for e.g. synchronizing on aMap<K, Reference<V>, such that closing a reference removes the map entry before it can be accessed and conversely, synchronizing on the map prevents the reference from becoming released. TODO Point to the ClaimingLoadingCache implementation -
comment
-
parent
-
isClosed
protected volatile boolean isClosed -
acquisitionStackTrace
-
closeStackTrace
-
closeTriggerStackTrace
-
childRefs
-
activeChildRefs
protected volatile int activeChildRefs
-
-
Constructor Details
-
RefImpl
-
-
Method Details
-
finalize
TODO Switch to Java 9 Cleaner once we upgrade -
getComment
-
getSynchronizer
Description copied from interface:RefReturn the object on which reference acquisition, release and the close action are synchronized on.- Specified by:
getSynchronizerin interfaceRef<T>
-
get
Description copied from interface:RefGet the referent only iff this ref instance has not yet been closed. This method fails for closed alive refs. A closed reference is alive if it has unclosed child references. For most use cases the referent should be accessed using this method. -
acquire
Description copied from interface:RefAcquire a new reference with a given comment object Acquiration fails if isAlive() returns false -
release
-
isAlive
public boolean isAlive()Description copied from interface:RefA reference may itself be closed, but references to it may keep it alive -
close
public void close()- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceRef<T>
-
checkRelease
protected void checkRelease() -
fromCloseable
-
create2
Create method where the close action is created from a provided lambda that accepts the value -
create
-
create
public static <T> Ref<T> create(T value, Object synchronizer, AutoCloseable releaseAction, Object comment) -
createClosed
-
isClosed
public boolean isClosed()Description copied from interface:RefCheck whether this reference is closed -
getRootRef
Description copied from interface:RefGet the root reference- Specified by:
getRootRefin interfaceRef<T>
-
getAcquisitionStackTrace
Description copied from interface:RefOptional operation. References may expose where they were acquired- Specified by:
getAcquisitionStackTracein interfaceRef<T>- Returns:
-
getCloseStackTrace
- Specified by:
getCloseStackTracein interfaceRef<T>
-
getCloseTriggerStackTrace
- Specified by:
getCloseTriggerStackTracein interfaceRef<T>
-
toString
-