Class SharedResourceHolder


  • @ThreadSafe
    public final class SharedResourceHolder
    extends java.lang.Object
    A holder for shared resource singletons.

    Components like client channels and servers need certain resources, e.g. a thread pool, to run. If the user has not provided such resources, these components will use a default one, which is shared as a static resource. This class holds these default resources and manages their life-cycles.

    A resource is identified by the reference of a SharedResourceHolder.Resource object, which is typically a singleton, provided to the get() and release() methods. Each Resource object (not its class) maps to an object cached in the holder.

    Resources are ref-counted and shut down after a delay when the ref-count reaches zero.

    • Method Detail

      • get

        public static <T> T get​(SharedResourceHolder.Resource<T> resource)
        Try to get an existing instance of the given resource. If an instance does not exist, create a new one with the given factory.
        Parameters:
        resource - the singleton object that identifies the requested static resource
      • release

        public static <T> T release​(SharedResourceHolder.Resource<T> resource,
                                    T instance)
        Releases an instance of the given resource.

        The instance must have been obtained from get(Resource). Otherwise will throw IllegalArgumentException.

        Caller must not release a reference more than once. It's advisory that you clear the reference to the instance with the null returned by this method.

        Parameters:
        resource - the singleton Resource object that identifies the released static resource
        instance - the released static resource
        Returns:
        a null which the caller can use to clear the reference to that instance.