Class MultiReferenceStorage

  • All Implemented Interfaces:
    Storage

    public class MultiReferenceStorage
    extends Object
    implements Storage

    A wrapper around another Storage that also maintains a reference counter. The inner storage gets deleted only if the reference counter reaches zero.

    Reference counting is used to delete the storage when it is no longer needed. So, any users of this class should note:

    • Constructor Detail

      • MultiReferenceStorage

        public MultiReferenceStorage​(Storage storage)
        Creates a new MultiReferenceStorage instance for the given back-end. The reference counter is initially set to one so the caller does not have to call addReference() after this constructor.
        Parameters:
        storage - storage back-end that should be reference counted.
        Throws:
        IllegalArgumentException - when storage is null
    • Method Detail

      • addReference

        public void addReference()
        Increments the reference counter.
        Throws:
        IllegalStateException - if the reference counter is zero which implies that the backing storage has already been deleted.
      • delete

        public void delete()
        Decrements the reference counter and deletes the inner Storage object if the reference counter reaches zero.

        A client that holds a reference to this object must make sure not to invoke this method a second time.

        Specified by:
        delete in interface Storage
        Throws:
        IllegalStateException - if the reference counter is zero which implies that the backing storage has already been deleted.