Class SharedResourceHolder

java.lang.Object
io.grpc.internal.SharedResourceHolder

@ThreadSafe public final class SharedResourceHolder extends 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 Details

    • 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.