Class ReferenceCountingCloseableObject<BaseObject extends Closeable>

java.lang.Object
org.apache.druid.segment.ReferenceCountingCloseableObject<BaseObject>
All Implemented Interfaces:
Closeable, AutoCloseable
Direct Known Subclasses:
ReferenceCountedIndexedTableProvider, ReferenceCountedSegmentProvider

public abstract class ReferenceCountingCloseableObject<BaseObject extends Closeable> extends Object implements Closeable
ReferenceCountingCloseableObject implements something like automatic reference count-based resource management, backed by a Phaser.

ReferenceCountingCloseableObject allows consumers to call close() before some other "users" which have checked out references via increment() or incrementReferenceAndDecrementOnceCloseable(), but have not called decrement() yet or the closer for incrementReferenceAndDecrementOnceCloseable(). The wrapped object won't be closed until all references are released.

  • Field Details

  • Constructor Details

    • ReferenceCountingCloseableObject

      public ReferenceCountingCloseableObject(BaseObject object)
  • Method Details

    • getNumReferences

      public int getNumReferences()
    • isClosed

      public boolean isClosed()
    • increment

      public boolean increment()
      Increment the reference count by one.
    • decrement

      public void decrement()
      Decrement the reference count by one.
    • incrementReferenceAndDecrementOnceCloseable

      public Optional<Closeable> incrementReferenceAndDecrementOnceCloseable()
      Returns an Optional of a Closeable from decrementOnceCloseable(), if it is able to successfully increment(), else nothing indicating that the reference could not be acquired.
    • decrementOnceCloseable

      public Closeable decrementOnceCloseable()
      Returns a Closeable which action is to call decrement() only once. If close() is called on the returned Closeable object for the second time, it won't call decrement() again.
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable